-
[백준] 1920번: 수 찾기코딩(Coding)/백준 문제풀이 2020. 12. 30. 12:15728x90
1920번: 수 찾기
첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들
www.acmicpc.net
수 찾기 성공분류
문제
N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.
입력
첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.
출력
M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다.
문제접근
해당 문제는 이진탐색을 통해 풀어도 되지만, 나는 저번 문제에서 처럼 파이썬의 딕셔너리를 통해 문제를 접근하였다. 입력으로 숫자가 입력되면 딕셔너리에 key값으로 삽입하고 그에 대한 value는 True로 설정해 존재함을 판단하도록 설계했다.
코드
""" 백준 알고리즘 1920번: 수 찾기 https://www.acmicpc.net/problem/1920 해당 문제는 dictionary로 해결할 수 있음 A의 요소를 dictionary로 하고 m 만큼의 정수들(Barr라고 변수 설정함)을 해당 딕셔너리에서 존재 여부를 확인함 """ import sys def calc(n): # A에 대한 값을 입력 받음 공백 단위로 split Aarr = sys.stdin.readline()[:-1].split(' ') # m과 m만큼의 개수만큼의 정수를 입력 받음 Barr도 공백단위로 split m = int(sys.stdin.readline()) Barr = sys.stdin.readline()[:-1].split(' ') # A에 대한 정보를 딕셔너리로 저장함 Adict = {} for i in range(n): Adict[Aarr[i]] = True # Barr의 원소가 Adict의 key값에 있고, 그 key값의 value가 True일 경우 1을 삽입 # 아닐 경우 0을 삽입 result = [] for i in range(m): if Barr[i] in Adict.keys() and Adict[Barr[i]] == True: result.append(1) else: result.append(0) return result def main(): n = int(sys.stdin.readline()) result = calc(n) for i in result: print(i) if __name__ == "__main__": main()
calc()메소드를 자세히 보자 A의 입력과 B의 입력을 각각 int 단위로 스플릿하고 A에 대한 입력을 딕셔너리에 삽입한다. 이후 B의 길이만큼(m) 반복하여 B의 요소가 A 딕셔너리에 존재하는지 판단하여 result에 append한다.
728x90'코딩(Coding) > 백준 문제풀이' 카테고리의 다른 글
[백준] 1436번: 영화감독 숌 (0) 2021.01.04 [백준] 1924번: 2007년 (0) 2020.12.31 [백준] 7785번: 회사에 있는 사람 (0) 2020.12.29 [백준] 10174번: 팰린드롬 (0) 2020.12.29 [백준] 1037번: 약수 (0) 2020.12.28