PS/Baekjoon Online Judge 586

[백준 1110] 더하기 사이클 [C]

풀이 원래의 수로 돌아올 때까지 일의 자리에 10을 곱한 값과, 십의자리/일의자리를 쪼개서 더한 값을 10으로 나누었을 때의 나머지를 더하면 된다. result = ((N%10)*10) + (((N/10) + (N%10))%10); 소스코드 #include int main() { int N, circle = 0, result; scanf("%d", &N); int save_N = N; while (1) { result = ((N%10)*10) + (((N/10) + (N%10))%10); circle++; if (result == save_N) break; N = result; } printf("%d", circle); } 출처 1110번: 더하기 사이클 0보다 크거나 같고, 99보다 작거나 같은 정수가..

[백준 15552] 빠른 A+B [C]

풀이 printf(), scanf()는 충분히 빠르므로 그냥 사용해도 된다. 소스코드 #include int main() { int N, A, B; scanf("%d", &N); while (N--) { scanf("%d %d", &A, &B); printf("%d\n", A + B); } } 출처 15552번: 빠른 A+B 첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다. www.acmicpc.net

[백준 2750] 수 정렬하기 [C]

풀이 처음에는 입력받은 숫자에 해당하는 배열을 1로 초기화한 후 출력해주는 방법으로 접근했으나, 시작부터 틀렸다. #include #define MAX 1001 int main(){ int N, num, arr[MAX] = {0, }; scanf("%d", &N); while (N--){ scanf("%d", &num); arr[num-1] = 1; } for (int i = 0; i < MAX; i++) if (arr[i]) printf("%d\n", i + 1); } 아마도, "수의 절대값이 1,000보다 작거나 같은 정수"라는게 양수가 아닌, 음수 또한 입력되는 것으로 추측되기 때문에 틀린 것 같다. Insertion Sort를 사용해 해결했다. 소스코드 #include int main() { in..

[백준 10989] 수 정렬하기 3 [C]

풀이 "수 정렬하기 2"와는 반대로 시간효율보다 공간효율이 중시되는 문제이기 때문에 동일한 코드를 사용하면 틀릴 것 이다. 그래서, 주어지는 숫자의 개수를 배열에 저장 후, 각 숫자의 개수만큼 반복해서 출력하는 방법으로 해결했다. 소스코드 #include #define MAX 10000 int main(){ int N, num, cnt[MAX] = {0, }; scanf("%d", &N); while (N--){ scanf("%d", &num); cnt[num-1]++; } for (int i = 0; i < MAX; i++) if (cnt[i] != 0) for (int j = 0; j < cnt[i]; j++) printf("%d\n", i + 1); } 출처 10989번: 수 정렬하기 3 첫째 줄에..