본문 바로가기
Algorithm

[자료구조/해시] 백준 1620 나는야 포켓몬 마스터 이다솜 - Python

by jangThang 2022. 2. 12.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    1620번: 나는야 포켓몬 마스터 이다솜

    첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     포켓몬 이름을 순서대로 입력받습니다. 입력받은 순서대로 번호를 부여하며(1,2,3...) 숫자 또는 포켓몬 이름으로 질문합니다. 숫자가 입력으로 들어오면 해당 포켓몬 이름을, 이름이면 번호를 출력해야 합니다.

     

    2022.01.19 - [Algorithm] - [Algorithm] 단골 1번 문제, 구현 / 수학

     

    [Algorithm] 단골 1번 문제, 구현 / 수학

    [ Contents ] 1. 구현  단순히 '구현'만 하면 되는 문제 유형입니다. 문제를 이해하고 입력에 맞춰 적절한 출력만 하면 됩니다. 특별한 알고리즘이나 프로그래밍적 기법 없이, 단순 제어문만 사용하

    star7sss.tistory.com

     문제 설명이 충격적으로 길었습니다.. 열심히 읽었으나, 결국 앞 내용은 필요 없었습니다. 그저 사전 형식으로 입력받고 출력하시면 됩니다.

     

     

     

    3. 코드

    import sys
    input = sys.stdin.readline
    
    N, M = map(int, input().split())
    # 입력
    dict = dict()
    for i in range(N):
        dict[i+1] = input().rstrip() #포켓몬 번호, 이름
    
    #출력
    for i in range(M):
        question = input().rstrip()
        try:
            answer = dict.get(int(question))
            print(answer)
        except: #문자일 경우
            for key, value in dict.items():
                if value == question:
                    print(key)

     단순히 dictionary 형식으로 구현하면, value로 key를 탐색하는 시간이 너무 오래 걸렸습니다. (시간 초과)

     

     

    import sys
    input = sys.stdin.readline
    
    N, M = map(int, input().split())
    # 입력
    
    lst = [] #이름 저장
    dict = dict() #번호랑 이름 매칭
    for i in range(N):
        lst.append(input().rstrip())
        dict[lst[i]] = i+1 #포켓몬 이름, 번호
    
    #출력
    for i in range(M):
        question = input().rstrip()
    
        # 숫자면 list에서 탐색
        if question.isdigit():
            print(lst[int(question)-1])
        else:
            print(dict[question])

     시간을 줄이려면 메모리를 더 쓰면 되죠. 이름을 따로 저장한다음, 숫자면 리스트에서 탐색했습니다.

     

     

    star가 되고나서 Tistory

    반응형

    댓글