_Han_
나의 개발 노트
_Han_
  • 분류 전체보기 (272)
    • 데이터 엔지니어링 (29)
    • 인프라 (3)
    • 추천시스템 (11)
    • 코딩테스트 (146)
    • 부트캠프 회고 (15)
    • 회고 (4)
    • 자격증 (1)
    • 파이썬 프로그래밍 (6)
    • 통계 (2)
    • Git (21)
    • 유니티2D (33)

최근 글

반응형
hELLO · Designed By 정상우.
_Han_

나의 개발 노트

[코딩테스트] 백준 수 찾기 파이썬(Python)
코딩테스트

[코딩테스트] 백준 수 찾기 파이썬(Python)

2023. 1. 17. 21:29
반응형

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

 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net

성공코드에 대하여 이야기하기전에 시간초과로 실패한 코드부터 이야기하겠습니다.

 

실패코드

N = int(input())
A = list(map(int, input().split()))
M = int(input())
numbers = list(map(int, input().split()))

results = []
for number in numbers:
  if number in A:
    results.append(1)
  else:
    results.append(0)

for result in results:
  print(result)

주어진 numbers를 반복하면서 A안에 number가 존재하는지 판단하여 result에 결과를 저장하는 방식으로 코드를 작성하였는데

시간초과로 실패하였습니다. $O(n^{2})$의 시간복잡도가 나와서 실패한것으로 생각됩니다.

 

다음은 성공한 코드입니다.

성공코드

N = int(input())
A = list(map(int, input().split()))
M = int(input())
numbers = list(map(int, input().split()))
dic = {}
results = []
for i in A:
  dic[i] = True
for number in numbers:
  if dic.get(number):
    results.append(1)
  else:
    results.append(0)

for result in results:
  print(result)

시간복잡도를 줄이기 위하여 딕셔너리 구조를 이용하여 A에 있는 모든 숫자들을 딕셔너리에 저장하였습니다.

그리고 numbers를 반복하면서 dic.get(number)를 하면 주어진 number가 딕셔너리에 있는지 확인하게 됩니다.

실패한코드와 차이점은 실패한 코드에서는 number in A로 $O(n)$의 시간복잡도가 걸리지만 dic.get()함수는 $O(1)$의 시간복잡도가 걸리게 됩니다. 여기서 시간복잡도를 줄여 문제를 해결할 수 있었습니다.

 

 

반응형

'코딩테스트' 카테고리의 다른 글

[코딩테스트] 프로그래머스 프린터 파이썬(Python)  (0) 2023.01.19
[코딩테스트] 프로그래머스 괄호 회전하기 파이썬(Python)  (1) 2023.01.18
[코딩테스트] 백준 부분수열의 합 파이썬(Python)  (0) 2023.01.14
[코딩테스트] 프로그래머스 테이블 해시 함수 파이썬(Python)  (0) 2023.01.13
[코딩테스트] 프로그래머스 개인정보 수집 유효기간 파이썬(Python)  (0) 2023.01.11
    '코딩테스트' 카테고리의 다른 글
    • [코딩테스트] 프로그래머스 프린터 파이썬(Python)
    • [코딩테스트] 프로그래머스 괄호 회전하기 파이썬(Python)
    • [코딩테스트] 백준 부분수열의 합 파이썬(Python)
    • [코딩테스트] 프로그래머스 테이블 해시 함수 파이썬(Python)
    _Han_
    _Han_
    학습한 것을 기록합니다.

    티스토리툴바