https://www.acmicpc.net/problem/1932

 

1932번: 정수 삼각형

첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.

www.acmicpc.net

쉬운 문제인데 맨 처음에 삼각형 경로를 비교할 때 j값을 j < i로 두고 뭐가 틀렸나 한참 찾았습니다.

 

주석처리 한 부분은 제대로 잘 더해지고 있는지 확인하기 위한 코드로, 만약 이 글을 읽고 계신 분이 자신의 코드가 잘 작동하지 않는다고 느끼신다면 주석 부분을 긁어서 밑에 넣고 같이 실행시켜보세요. 

뭐가 틀린지 알 수 있을 겁니다.

#include <stdio.h>
#define MAX(a, b) (((a) > (b)) ? (a) : (b))

int main(void) {
    int n;
    int arr[510][510];
    scanf("%d", &n);
    for(int i = 0; i < n; i++) {
        for(int j = 0; j <= i; j++) {
            scanf("%d", &arr[i][j]);
        }
    }
    for(int i = 0; i < n; i++) {
        for(int j = 0; j <= n - i; j++) {
            arr[n - i - 1][j] += MAX(arr[n - i][j], arr[n - i][j + 1]); // (바로 밑과 우측 대각선 비교하여 큰 값 올림)
        }
    }
/*        for(int i = 0; i < n; i++) {
        for(int j = 0; j <= i; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }*/
        printf("%d", arr[0][0]); //최상단 (가장 큰 값 출력)
}

아까운 30분....

https://www.acmicpc.net/problem/2164

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net

풀이

 

배열을 처음에 크게 준 다음에 처음에 카드의 장 수(n)만큼 배열의 첫 번째부터 넣어줬습니다.

 

그 다음에 for문을 사용해 짝수 번째에 있는 카드를 순서대로 맨 처음 생성된 배열의 뒤에 빈 공간에다가 채워줬습니다.

만약 다음 배열이 비어있다면 마지막 배열인 것으로,

for문에 if를 넣어줘서 마지막 배열이라면 출력해주도록 했습니다.

 

그리고 n = 1 일 땐

arr[0] 에 1이 채워져 있는데

for문이 arr[1] 부터 확인을 해줘서 예외가 뜨기 때문에 

맨 마지막에 예외를 넣어줬습니다.

#include <stdio.h>

int main(void) {
    int arr[2000000] = {};
    int n, a = 0;
    scanf("%d", &n);
    for(int i = 0; i < n; i++) {
        arr[i] = i + 1;
    }
    for (int i = 1; i < 1000000; i++) {
        arr[n + a] = arr[i];
        i++;
        a++;
        if(arr[i + 1] == 0 && arr[i] != 0) {
            printf("%d", arr[i]); //마지막 숫자가 맞는지 확인하기
        }
    }
    if (n == 1)
    printf("1");
    return 0;
}

근데 다른 분들 푸신 방법 보니까 큐라는 제가 모르는 걸 사용해서 푸시던데, 이렇게 풀면 안 되는 건가요?

 

제 방법으로는 쉽다고 느껴서 10분 정도만에 푼 것 같은데...

+ Recent posts