브론즈 I 12

[백준 14730] 謎紛芥索紀 (Small) [C]

소스코드 #include int main(){ int N, n1, n2, result = 0; scanf("%d", &N); for (int i = 0; i < N; i++){ scanf("%d %d", &n1, &n2); result += n1*n2; } printf("%d", result); } 출처 14730번: 謎紛芥索紀 (Small) 성민이는 이번 학기에 미적분학 과목을 수강하고 있다. 다항함수의 미분 단원 과제를 하던 도중 미분을 하기가 귀찮아진 성민이는 미분하려는 함수 f(x)가 주어지면, 미분 된 함수 f’(x)를 자동 www.acmicpc.net

[백준 2748] 피보나치 수 2 [C]

풀이 "백준 2747, 피보나치 수"에서 사용한 Dynamic Programming 풀이방식을 재사용해 시간초과는 발생하지 않지만, 수가 너무 커서 long long 형을 사용해주어야 한다. 소스코드 #include long long fibo(int n){ long long fiboNum[2] = {0, 1}; for (int i = 1 ; i < n; i++) fiboNum[(i+1)%2] = fiboNum[i%2] + fiboNum[(i-1)%2]; return fiboNum[n%2]; } int main(){ int n; scanf("%d", &n); printf("%lld", fibo(n)); } 출처 및 참고자료 2748번: 피보나치 수 2 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수..

[백준 2869] 달팽이는 올라가고 싶다 [C]

풀이 시간제한이 있어 규칙을 찾아 단순 연산으로 풀이해야 하는 문제이다. A만큼 올라갔을 때, V이상이면 멈추고, 그렇지 않으면 B만큼 감소한다. (A-B가 V-B 이상) (V-B) / (A-B)의 값이 위 조건을 성립하지만(소수점 단위를 포함한 최소조건), 날짜(정수)를 기준으로 며칠이 걸리는지 구해야 하기 때문에 다음과 같이 식을 변경했다. 1 + (V-B-1) / (A-B) 소스코드 #include int main(){ int A, B, V; scanf("%d %d %d", &A, &B, &V); printf("%d\n", 1+(V-B-1)/(A-B)); } 출처 2869번: 달팽이는 올라가고 싶다 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,..

[백준 2839] 설탕 배달 [C]

풀이 5kg 봉지를 최대한 많이 들때, 배달하는 봉지의 개수가 최소인점을 이용해 풀이했다. 입력받은 N을 5(kg)로 나누었을 때 나머지가 0이면 몫이 봉지의 개수이다. 나머지가 0이 아니라면, 몫(cnt)을 한 개씩 줄이고, 3(kg)봉지를 몇개를 추가해야 알맞게 배달할 수 있는지 계산한다. 만약, 나누어 떨어지지 않는다면 cnt는 -1로 감소하며, -1을 출력할 것이다. 소스코드 #include int main() { int N, cnt = 0; scanf("%d", &N); cnt = N / 5; if (N % 5) for (; cnt >= 0; cnt--) if ((N - 5 * cnt) % 3 == 0) { cnt += (N - 5*cnt) / 3; break; } printf("%d\n", 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보다 작거나 같은 정수가..

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

[백준 1259] 팰린드롬수 [C]

풀이 문자열의 길이를 알아내 문자열의 양끝을 비교하는 방식으로 문제를 해결할 수 있다. 무의미한 0이 주어지지 않으므로, num[0]의 값이 0이면 반복문을 빠져나온다. 소스코드 #include #include int main(){ char num[6]; while (scanf("%s", num) && num[0] != '0') { int len = strlen(num), palin = 1; for (int i = 0; i < len/2; i++) if (num[i] != num[len - 1 - i]){ palin = 0; break; } puts(palin ? "yes" : "no"); } } 출처 1259번: 팰린드롬수 입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 9999..

[백준 10798] 세로읽기 [C]

풀이 2중 배열을 통해 입력을 받고 row와 col의 증가 순서를 바꾸어 문자를 하나씩 출력하면 해결할 수 있다. 소스코드 #include int main(){ char str[5][15] = { 0, }; for (int row = 0; row < 5; row++) scanf("%s", str[row]); for (int col = 0; col < 15; col++) for (int row = 0; row < 5; row++) if (str[row][col] != '\0') putchar(str[row][col]); } 출처 10798번: 세로읽기 총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, ..