PS 640

[백준 5622] 다이얼 [C]

풀이 각 숫자의 시작 문자를 문자열로 구성하고, 문자열의 아스키코드값을 비교해 늘어난 index만큼 대기시간을 계산했다. 소스코드 #include int main(){ char num[16]; int result = 0; scanf("%s", num); for (int i = 0; i < num[i] != '\0'; i++) for (char ch = num[i], wait = 0; ; wait++){ if (ch < "@@ADGJMPTW["[wait]) break; result += 1; } printf("%d", result); } 출처 5622번: 다이얼 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다. www.acmicpc.net

[백준 1065] 한수 [C]

풀이 원래는 Brute Force로 해결하는 문제지만, 수의 범위가 작기 때문에 다음과 같이 풀이했. 1 ~ 99는 비교할 다음 자리의 수가 없기 때문에 한수이다. 백의자리 - 십의자리 = 십의자리 - 일의자리가 같으면 한수이다. 소스코드 #include int ap(int n){ int cnt = 0; for (int i = 1; i 0 && i < 100) cnt ++; else if (i/100 - (i%100)/10 == (i%100)/10 - ((i%100)%10)) cnt++; return cnt; } int main(){ int N; scanf("%d", &N); printf("%d", ap(N)); } 출처 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한..

[백준 4673] 셀프 넘버 [C]

풀이 생성자가 없으면, d(n)을 형성하지 못하므로, d(n)이 아닌 수들이 셀프 넘버라고 볼 수 있다. 소스코드 #include #define MAX 10001 int n_selfNum(int n){ int result = n; for (; n > 0; n /= 10) result += n%10; return result; } int main(){ int arr[MAX] = {0, }; for (int i = 1; i < MAX; i++){ int n = n_selfNum(i); n < MAX && (arr[n] = 1); } for (int i = 1; i < MAX; i++) !arr[i] && printf("%d\n", i); } 출처 4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D..

[백준 15596] 정수 N개의 합 [C]

풀이 다음처럼 반복문 내부의 변화식 란에서 연산을 하면 틀린다. 이에 대해 아직 아는 정보가 없어 추후 알게된다면 글을 하나 작성하겠다. long long sum(int *a, int n) { long long ans = 0; for (int i = 0; i < n; i++, ans += a[i]); return ans; } 소스코드 long long sum(int *a, int n) { long long ans = 0; for (int i = 0; i < n; i++) ans += a[i]; return ans; } 출처 15596번: 정수 N개의 합 C++17, Java 8, Python 3, C11, PyPy3, C99, C++98, C++11, C++14, Python 2, PyPy2, Go, C..

[백준 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