BOJ 1920 - python

1 minute read

1920 - 수 찾기

  • 문제유형 : 해시, 배열, 구현
  • 기본적인 해시 원리 이용으로 쉽게 풀 수 있다.
  • python에서는 dictionary, set자료형을 사용하여 풀 수 있기 때문에 굳이 해시 아니여도 정답처리 되기는 함

혼자풀어보기

  • image
  • 소감 : 파이썬 푼지 좀 오래되어서 기본 밖에 생각이 안남. 꾸준히 하면 이제 기억나겠지
  • 내가 쓰고도 코드가 참 유아틱한 것 같음.
  • 이 문제를 구글링했는데 다들 멋지게 풀더라. 난 갈 길이 존나 멀었음 ㅋ ㅋ ㅋ
    n = int(input())
    N = set(map(int,input().split()))
    m = int(input())
    M = list(map(int,input().split()))
    for i in M:
      if i in N:
          print(1)
      else: print(0)
    
  • 파이썬은 기본적으로 자료형이 많음. 그게 장점이기도 하고. 근데 라이브러리나 자료형이 많다는 게 내가 다른 언어 공부할 때 그런 자료형을 구현하는 알고리즘을 구현하는 능력을 좀 안좋게 만들까봐 경계중임. 쓸데없는 내 걱정일 수도 있음

문제 풀이 방법

  • 4라인에서 입력받은 input들이 2라인에 있는 것들에게 포함되냐 유무를 따지는 게 main -> 각각을 따져야 하는 것은 line 4이지 line2는 그럴 필요 없음
  • 그래서 line2에서 set자료형을 썼음
  • python에서는 set,dictionary로도 구현이 가능하다고 했는데 딕셔너리로 구현하는 방법은 잘 모르겠음
  • 리스트를 for문으로 처음부터 끝까지 돌리고 집합에 그 요소가 있는지 if문으로 판별했음. 가장 효율적인 방법은 아닌 것 같다고 생각했음. 근데 그거 말고는 모르겠음
  • 제일 개선하고 싶은 부분은 코드 초반에 쓸데없이 line이 많은 거랑, 출력부분이 너무 세련되지 못하다는 거
  • 뭐 어쨌든 정답인정은 받았다

문제 풀이 핵심 아이디어

  1. 특정 정수의 등장 여부만을 간단히 체크하면 됨.
  2. python에서는 dictionary 자료형을 해시처럼 사용할 수 있다.
  3. 본 문제는 set자료형을 이용해 더욱 간단히 풀 수 있다. -> 나도 3번으로 풀었음 ㅋㅋㅋㅋㅋ

나동빈T 소스코드

n = int(input())
array = set(map(int,input().split()))
m = int(input())
x = list(map(int,input().split()))

for i in x:
  if i not in array:
      print('0')
  else :
      print('1')
  
  • 걍 나랑 풀이 플로우 개똑같네 ㅋㅋㅋㅋㅋㅋㅋㅋ
  • n개의 데이터가 set형태로 array라는 변수 안에 담아준다. 원소 중복 안된다(set의 특징) -> 효율적으로 존재여부 체크가능
  • 특정한 원소가 집합 안에 있는지 파악할 때 set변수 good~
  • 데이터가 array안에 포함되어 있지 않다면 0출력, 아니면 1출력
  • 파이썬에서는 굳이 해시 직접 구현할 필요 없음