문제
세 수가 주어지고, A는 가장 작은 수, B는 중간, C는 가장 큰 수이다. 주어진 문자 순서대로 출력하라.
입력
세 수와 A, B, C 중 3글자 문자열이 주어진다.
출력
문자열 순서에 따라 수를 출력한다.
예제
| 입력 | 출력 |
|---|---|
1 5 3 BAC | 3 1 5 |
풀이
세 수를 정렬한 뒤 문자에 따라 매핑하여 출력한다.
- 세 수를 오름차순으로 정렬한다 (num[0]=A, num[1]=B, num[2]=C)
- 입력 문자열의 각 문자에 대해
'A'=0,'B'=1,'C'=2로 인덱스를 계산한다 num[문자 - 'A']로 해당하는 수를 출력한다
핵심 아이디어: 문자 'A'2 인덱스로 변환하면 정렬된 배열에서 직접 참조할 수 있다.'C'를 0
코드
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int num[3];
cin >> num[0] >> num[1] >> num[2];
sort(num, num + 3); // O(nlgn)
for (int i = 0; i < 3; i++)
{
char tmp;
cin >> tmp;
cout << num[tmp - 'A'] << ' ';
}
}복잡도
- 시간: O(1) (고정 크기 3)
- 공간: O(1)