programming

C언어 4차시 Layer7 과제 - 백준 14467

leesu0605 2022. 4. 17. 21:00

코드


#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <algorithm>
using namespace std;

int main() {
    int n, sum = 0, arr[11];
    scanf("%d", &n);
    for (int i = 0; i < 11; i++)
        arr[i] = 10;
    for (int i = 0; i < n; i++) {
        int a, b;
        scanf("%d %d", &a, &b);
        if (arr[a] == 10) {
            arr[a] = b;
        }
        else if (arr[a] != b) {
            arr[a] = b;
            sum++;
        }
    }
    printf("%d", sum);
}


· 이 문제는 소의 번호와 위치정보를 가지고 소가 이동했는지 이동을 하지 않았는지 판단하는 문제이다. 이 문제는 많은 다른 문제들과 다르게 입력을 받으면서 계산을 할 수 있어 효율적으로 할 수 있었다.

· 매번 입력을 받으면서 배열의 소의 번호번째 칸의 값이 전에 입력받은 값과 다르면 count를 증가시킨 후 그 배열의 값을 새로 입력받은 값으로 바꾸고, 그렇지 않으면 그냥 넘어가는 로직을 취해 소가 이동한 최소 경우의 수를 구했다. 다만 한가지 예외처리를 해주어야 하는데, 어떤 소의 위치정보를 처음 입력받았을 때는 소가 이동한 걸로 치지 않기 때문에 모든 배열 요소에 초기값을 음수로 할당해주어 입력받는 도중 소의 번호번째 칸이 -1이면 그 배열의 값을 새로 입력받은 값으로 바꾸는 과정만 취해 count는 건드리지 않으면 된다.