ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 초급반 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]); }
    }

     

Designed by Tistory.