Henu
개발냥발
Henu
전체 방문자
오늘
어제
  • 분류 전체보기 (411)
    • DevOps (52)
      • Kubernetes (19)
      • Docker (14)
      • AWS (3)
      • Nginx (4)
      • Linux (4)
      • ArgoCD (1)
      • CN (2)
      • NATS (0)
      • Git (5)
    • Back-End (30)
      • Django (18)
      • Spring (5)
      • JPA (1)
      • MSA (5)
    • CS (87)
      • SystemSoftware (20)
      • OS (25)
      • Computer Architecture (16)
      • Network (23)
      • Database (2)
    • Lang (21)
      • Java (9)
      • Python (4)
      • C# (8)
    • Life (12)
    • 블록체인 (2)
    • Algorithm (204)
      • BOJ (160)
      • 프로그래머스 (19)
      • LeetCode (4)
      • SWEA (1)
      • 알고리즘 문제 해결 전략 (8)
      • DS, algorithms (7)
      • Checkio (5)
    • IT (2)

블로그 메뉴

  • GitHub
  • 글쓰기
  • 관리자

공지사항

  • Free!

인기 글

태그

  • 다이나믹 프로그래밍
  • BFS
  • Network
  • 프로그래머스
  • boj
  • django
  • Kubernetes
  • DFS
  • 백트래킹
  • docker

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Henu

개발냥발

Algorithm/BOJ

[BOJ] 듣보잡_1764.py

2020. 6. 21. 23:22

김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 영어 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다.

출력

듣보잡의 수와 그 명단을 사전순으로 출력한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import sys
def DBJ(n:int):
    not_heard_seen = []
    person = []
    for _ in range(n):
        not_heard_seen.append(sys.stdin.readline().strip("\n"))
 
    not_heard_seen.sort()
    for i, name in enumerate(not_heard_seen):
        try:
            if name == not_heard_seen[i+1]:
                person.append(name)
        except IndexError:
            pass
    
    print(len(person))
    for i in person:
        print(i)
 
if __name__ == "__main__":
    n, m = map(int, sys.stdin.readline().split())
    DBJ(n+m)
 
Colored by Color Scripter
cs

처음에 문제 보자마자 구현하기는 너무 쉬워보였다

그래서 아무생각없이 처음 시도한게 2중 for문을 써서 하나하나 확인하는 방식이었다

만약 n과 m이 각각 500000로 주어지면 반복횟수가 50만*50만 이 되어 당연히 시간초과가 날 수 밖에 없었다

 

그리고 두번째로는 한 리스트에 n+m 개수의 이름들을 다 받은 후 count==2인 이름만 골라내는 걸 생각했는데

말만 다르지 2중 for 문이랑 반복횟수는 다를게 없었다..

 

그래서 마지막으로 한 리스트에 이름들을 모두 받고 그 리스트를 정렬하면, 같은 이름은 당연히 서로 붙어있을 것을 이용했다

그래서 for문은 하나만 쓰고 i번째 이름이 i+1번째 이름과 같으면

i번째 이름을 임의의 리스트에 추가하는 식으로 했다

그러면 마지막i 번째 이름에서 i+1번째를 찾을 때 인덱스에러가 뜨는데 그건 try-except문을 사용해서 예외처리를 해주었다

 

'Algorithm > BOJ' 카테고리의 다른 글

[백준 12865] 평범한 배낭 C++  (0) 2021.02.26
[BOJ] 프린터 큐_1966.c++  (0) 2020.09.07
[BOJ] 정사각형_1485.py  (0) 2020.07.13
[BOJ] 설탕배달_2839.py  (0) 2020.06.09
[BOJ] 한수_1065 python  (0) 2020.06.09
    'Algorithm/BOJ' 카테고리의 다른 글
    • [BOJ] 프린터 큐_1966.c++
    • [BOJ] 정사각형_1485.py
    • [BOJ] 설탕배달_2839.py
    • [BOJ] 한수_1065 python

    티스토리툴바