CS/알고리즘_문제풀이(파이썬)

중복 조회 2

Jedy_Kim 2021. 6. 18. 16:15
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import sys
 
if __name__ == "__main__":
  
  input = sys.stdin.readline
  n     = int(input())
  myDic = {} 
  
  for i in range(n):
    y, x = map(int, input().split()) 
    temp_key = str(y)+'/'+str(x)
    try : 
      myDic[temp_key]
    except
      myDic[temp_key] = i+1
  
  sum = 0  
  for k, v in myDic.items():    
    sum += v
  print(sum)
cs

 

#코드 : 배열을 통한 풀이법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys
 
if __name__ == "__main__":
  input = sys.stdin.readline
  arr = [[0]*110 for _ in range(110)]
  x   = [0]*1000010 
  y   = [0]*1000010
  n     = int(input())
   
  for i in range(1, (n+1)):
    x[i], y[i] = map(int, input().split())
  
  for i in range(1, (n+1)):
    if arr[x[i]][y[i]] == 0: arr[x[i]][y[i]] = i
    
  sum = 0
  for i in arr:
    for j in i:
      sum += j
      
  print(sum)
cs

 

반응형

'CS > 알고리즘_문제풀이(파이썬)' 카테고리의 다른 글

밀렵꾼  (0) 2021.06.18
조회 알고리즘 2  (0) 2021.06.18
중복 조회 1  (0) 2021.06.18
이동 알고리즘 2  (0) 2021.06.18
2차원 큰 이동  (0) 2021.06.18