[알고리즘] 백준 17219 비밀번호 찾기 (파이썬 풀이)

    728x90

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

     

    17219번: 비밀번호 찾기

    첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다. 두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번

    www.acmicpc.net

    문제

    2019 HEPC - MAVEN League의 "비밀번호 만들기"와 같은 방식으로 비밀번호를 만든 경민이는 한 가지 문제점을 발견하였다. 비밀번호가 랜덤으로 만들어져서 기억을 못 한다는 것이었다! 그래서 경민이는 메모장에 사이트의 주소와 비밀번호를 저장해두기로 했다. 하지만 컴맹인 경민이는 메모장에서 찾기 기능을 활용하지 못하고 직접 눈으로 사이트의 주소와 비밀번호를 찾았다. 메모장에 저장된 사이트의 수가 늘어나면서 경민이는 비밀번호를 찾는 일에 시간을 너무 많이 쓰게 되었다. 이를 딱하게 여긴 문석이는 경민이를 위해 메모장에서 비밀번호를 찾는 프로그램을 만들기로 결심하였다! 문석이를 도와 경민이의 메모장에서 비밀번호를 찾아주는 프로그램을 만들어보자.

    입력

    첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다.

    두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번호가 공백으로 구분되어 주어진다. 사이트 주소는 알파벳 소문자, 알파벳 대문자, 대시('-'), 마침표('.')로 이루어져 있고, 중복되지 않는다. 비밀번호는 알파벳 대문자로만 이루어져 있다. 모두 길이는 최대 20자이다.

    N+2번째 줄부터 M개의 줄에 걸쳐 비밀번호를 찾으려는 사이트 주소가 한줄에 하나씩 입력된다. 이때, 반드시 이미 저장된 사이트 주소가 입력된다.

    출력

    첫 번째 줄부터 M개의 줄에 걸쳐 비밀번호를 찾으려는 사이트 주소의 비밀번호를 차례대로 각 줄에 하나씩 출력한다.

     

    해결코드

    import sys
    input = sys.stdin.readline
    
    n,m = map(int, input().split())
    li = {}
    li2 = []
    for i in range(n):
        a,b = input().split()
        li[a] = b
    for i in range(m):
        k = input().rstrip()
        li2.append(li[k])
    print(*li2, sep='\n')

    문제풀이

    문제 설명을 간단히 하면 그냥 사이트 주소와 비밀번호 리스트를 입력받고

    사이트 주소를 입력받으면 비밀번호를 순서대로 출력하면 되는 문제이다.

     

    코드를 보면 입력시간을 줄이기 위해 sys라이브러리를 사용하였다.

    먼저 사이트 수와 비밀번호를 알려는 사이트 수를 n,m에 입력받는다.

     

    그리고 li라는 딕셔너리를 하나 만들어준다. (비밀번호를 찾기 위한 용도)

    li2라는 리스트를 하나 만들어주는데 이건 나중에 비밀 번호를 찾아서 저장해두는 용도이다.

     

    for문에서 n만큼 a,b를 입력받는다. 여기서 a,b는 사이트 주소와 비밀번호이다.

    li[a]=b의 형태는 {aaa: bbb}이다.

    그래서 li[a]를 출력할경우 bbb가 출력되게 된다.

     

    그리고 다른 for문에서는 m만큼 k를 입력받는다.

    여기서 k는 비밀번호를 찾으려는 사이트 주소이다.

    li[k]를 li2 리스트에 집어넣는다. (그냥 출력해도 되지만 결과가 깔끔하게 보이게 하기 위해 이 방식으로 함)

    그리고 for문을 나와서 li2를 한줄에 하나씩 출력해주면 된다.

     

    728x90

    댓글