1. 문제
2. Key Idea
2143 같이 한줄에 입력된 각 한 자리마다 몽땅 숫자로 정렬해야 하므로
gets / fgets 등의 함수 혹은 character 형 배열에 먼저 입력받아야 겠다고 생각
3. 소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <iostream> #include <algorithm> #include <string.h> using namespace std;
bool compare(char a, char b) { if(a > b) return true; else return false; }
int main(void) { int arr[12]; char N[12]; cin >> N; sort(N, N+strlen(N), compare);
for(int i = 0 ; i < strlen(N); i++) { arr[i] = N[i]-'0'; cout << arr[i]; } return 0; }
|
4. Mistake
(1)처음에 gets로 입력받고 sort 이후 puts로 문자열 그대로 내보냈다가 오답처리되었다.
원인은 char N[]; 배열에 담긴 값들은 character형인데 문제에서 요구하는 답안은
integer (정수)형 이기 때문이었다.
(사람의 눈에는 정수로 보이지만 알고리즘 채점 프로그램은 문자 값(ASCII Code Value)으로 인식할 수 있다.)
int형 정수로 바꿔주기위해
arr[i] = N[i]- '0'
ASCII Code 0에 해당하는 정수값을 빼주어 자동으로 int casting 되도록했다.
+
(2)
strlen이 아니라 배열 크기인 '12'를 더해주었다가 쓰레기값을 정렬해버리는 실수도 저질렀다.
sort(N, N + 12, compare) =====수정후 ====> sort(N, N+strlen(N) , compare)에서
strlen은 문자열의 끝 '\0'을 제외한 부분까지의 길이를 반환하는 함수이다.
'Algorithm > Algorithm (문제풀이)' 카테고리의 다른 글
[코드업 기초 100제 - 99번 성실한 개미] (0) | 2019.11.10 |
---|---|
피보나치 수열 2 (Memoization, Dynamic Programming ver) (0) | 2019.11.05 |
[백준 10814] 나이순 정렬하기 (0) | 2019.10.29 |
[백준 2751] 정렬하기 2 (0) | 2019.10.18 |
[백준 2750] 정렬하기 (0) | 2019.10.11 |