본문 바로가기
Coding Test(C++)

중복조회 2

by jinwooahn 2022. 4. 11.
728x90

문제


2차원 평면에 n 명의 사람이 있다. i 번 사람의 좌표는 두 자연수 yi, xi 로 표현되고, 같은 위치에 여러 사람이 존재할 수 있다. 1 번 사람부터 n 번 사람까지 순서대로 좌표가 주어진다. 각 좌표에 있는 사람의 번호의 합을 출력하여라.

단, 같은 위치에 두 명 이상의 사람이 있을 경우 가장 작은 번호만 더한다.

입력


첫 줄에 n 이 주어진다.

두 번째 줄부터 n 줄에 걸쳐 yi, xi 가 주어진다.

(1 ≤ n ≤ 100,000, 1 ≤ yi, xi ≤ 100)

출력


조건에 맞는 번호의 합을 출력한다.

입력의 예 1

6
1 1
2 3
2 2
1 3
1 1
4 5

출력의 예 1

16

입력의 예 2

5
1 1
1 1
1 1
2 2
3 3

출력의 예 2

10

입력의 예 3

5
1 1
1 2
1 3
1 1
2 2

출력의 예 3

11

입력의 예 4

6
1 1
1 1
1 1
2 2
3 3
3 3

출력의 예 4

10

 

 

앞선 중복조회1 문제와 같은 방식이고, 중복될 경우 가장 작은 번호만 더해야 한다.

따라서 board값이 0인경우에만 더하고, 그 이후에는 어차피 더 큰 번호일 경우이므로 더하지 않으면 된다.

 

#include <stdio.h>

const int MAX = 101;
int board[MAX][MAX];

int main(){
  int k;
  scanf("%d", &k);
  int sum = 0;
  for(int i = 1; i <= k; i++){
    int a, b;
    scanf("%d %d", &a, &b);
    if (board[a][b] == 0){
      sum += i;
      board[a][b]++;
    }
    else{
      board[a][b]++;
    }
  }
  printf("%d", sum);
  return 0;
}
728x90

'Coding Test(C++)' 카테고리의 다른 글

중복조회 1  (0) 2022.04.11
2차원 큰 이동  (0) 2022.04.05
1차원 큰 이동  (0) 2022.04.05