-
초급반 2주차 풀이 - 반복문, 배열, 문자열ALOHA - 2022/ALOHA - 초급반 (2022 1학기) 2022. 5. 1. 16:08
A. [10952] A+B - 5 (Bronze III)
더보기A와 B를 입력받은 뒤, A ≠ 0이거나 B ≠ 0인 동안 A+B를 계속 출력해주면 됩니다.
int main(){ while (1){ int a, b; scanf("%d %d", &a, &b); if (a != 0 && b != 0) break; printf("%d\n", a+b); } }
B. [10872] 팩토리얼 (Bronze III)
더보기N!의 정의는 1부터 N까지 곱한 값입니다. 그러니 1부터 N까지 곱해주면 됩니다.
int main(){ int n, fac = 1; scanf("%d", &n); for (i = 1; i <= n; i++){ fac *= i; } printf("%d", fac); }
C. [5597] 과제 안 내신 분..? (Bronze II)
더보기배열을 사용해서 과제를 제출했는지 표시해두고, 최종적으로 표시가 없는 2명의 학생의 번호를 출력해주면 됩니다.
int chk[40]; int main(){ for (int i = 1; i <= 28; i++){ int x; scanf("%d", &x); chk[x] = 1; } for (int i = 1; i <= 30; i++){ if (!chk[i]){ printf("%d\n", i); } } }
D. [3052] 나머지 (Bronze II)
더보기42로 나눈 나머지는 0 ~ 41 중 하나가 됩니다. 그러니, 각 나머지별로 등장했는지 여부를 확인해두면
최종적으로 등장했다고 표시된 나머지의 개수가 답이 됩니다.
int chk[50]; int main(){ for (int i = 1; i <= 10; i++){ int x; scanf("%d", &x); chk[x % 42] = 1; } int ans = 0; for (int i = 0; i < 42; i++){ ans += chk[i]; } printf("%d", ans); }
1. [2739] 구구단 (Bronze III)
더보기반복문으로 1부터 9까지 돌리면서 N * i를 출력해주면 됩니다.
int main(){ int n, i; scanf("%d", &n); for (int i = 1; i <= 9; i++){ printf("%d * %d = %d\n", n, i, n*i); } }
2. [10886] 0 = not cute / 1 = cute (Bronze III)
더보기1 (cute)로 응답한 횟수를 x라고 합시다. x > N/2라면 준희가 귀엽다는 것이고, 아니라면 귀엽지 않다는 것입니다.
int main(){ int n; scanf("%d", &n); int cnt = 0; while (n--){ int x; scanf("%d", &x); cnt += x; } if (x > n/2){ printf("JUnhee is cute!"); } else{ printf("Junhee is not cute!"); } }
3. [10101] 삼각형 외우기 (Bronze IV)
더보기문제에 나와있는대로 조건문을 작성해주면 됩니다.
int main(){ int a, b, c; scanf("%d %d %d", &a, &b, &c); if (a+b+c != 180){ printf("Error"); } else if (a == b && b == c){ printf("Equilateral"); } else if (a == b || b == c || c == a){ printf("Isosceles"); } else{ printf("Scalene"); } }
4. [2609] 최대공약수와 최소공배수 (Silver V)
더보기GCD(a, b)를 a와 b의 최대공약수, LCM(a, b)를 a와 b의 최소공배수라고 하면,
LCM(a, b) = ab / GCD(a, b)입니다.
두 수의 최대공약수는 min(a, b)부터 시작해서 1씩 내려가면서 a와 b로 동시에 나눠지는 가장 큰 수를 찾으면 되고,
두 수의 최소공배수는 아까 구한 최대공약수와 위에 나온 식을 통해서 구하면 됩니다.
int main(){ int a, b; scanf("%d %d", &a, &b); if (a > b){ int t = a; a = b; b = t; } // a ≤ b int g, l; for (int i = a; i >= 1; i--){ if (a % i == 0 && b % i == 0){ g = i; break; } } l = a*b / g; printf("%d %d", g, l); }
5. [2846] 오르막길 (Bronze II)
더보기오르막길의 시작점을 st로 고정한다면, 오르막길의 끝점 ed를 반복문을 통해 찾을 수 있습니다.
오르막길의 크기는 A[ed] - A[st]이므로, A[ed] - A[st]의 최댓값을 찾아주면 됩니다.
int arr[1020]; int main(){ int n; scanf("%d", &n); for (int i = 1; i <= n; i++){ scanf("%d", &arr[i]); } int ans = 0; int st = 1; while (st <= n){ int ed = st+1; while (ed <= n){ if (arr[ed-1] <= arr[ed]){ ed += 1; } else{ break; } } ed -= 1; int res = arr[ed] - arr[st]; if (res > ans){ ans = res; } st = ed+1; } printf("%d", ans); }
6. [2577] 숫자의 개수 (Bronze II)
더보기문제를 두 부분으로 나눠봅시다.
1. 세 수를 곱한 뒤 / 2. 그 수에서 등장하는 숫자의 개수를 센다.
1번은 진짜 세 수를 곱해주면 됩니다.
2번은 나머지 연산과 반복문을 사용해서 계산해줄 수 있습니다.
x를 현재 수라고 하면, x%10으로 x의 1의 자리를 알아낼 수 있으니, cnt[x%10] += 1으로 x의 1의 자리에 있는 수를 꺼낸 뒤, x /= 10으로 x의 1의 자리를 없애버린 뒤, 위 과정을 x가 0이 될 때까지 반복하면 됩니다.
int cnt[12]; int main(){ int a, b, c; scanf("%d %d %d", &a, &b, &c); int x = a*b*c; while (x){ cnt[x%10] += 1; x /= 10; } for (int i = 0; i < 10; i++){ printf("%d\n", cnt[i]); } }
'ALOHA - 2022 > ALOHA - 초급반 (2022 1학기)' 카테고리의 다른 글
초급반 6주차 풀이 - 구조체, STL (0) 2022.05.18 초급반 5주차 풀이 - DP, 시간복잡도 (0) 2022.05.10 초급반 4주차 풀이 - 함수, 재귀, DP (0) 2022.05.04 초급반 3주차 풀이 - 반복문, 배열, 누적합 (0) 2022.05.03 초급반 1주차 풀이 - 입출력, 연산자, 조건문 (0) 2022.04.29