파이썬 비밀번호 문제 - paisseon bimilbeonho munje

문제 출처 : www.acmicpc.net/problem/17219

17219번: 비밀번호 찾기

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

www.acmicpc.net

파이썬 비밀번호 문제 - paisseon bimilbeonho munje

문제 해석 : 저장한 비밀번호를 찾아 이를 출력하는 문제이다.

문제 풀이 : 간단한 딕셔너리 활용 문제이다. 저장을 딕셔너리로 하고 사이트를 키값으로 지정해 주면 된다.


풀이 코드

import sys
input = sys.stdin.readline

N, M = map(int, input().split())
add = {}

for _ in range(N):
    site, ps = input().split()
    add[site] = ps

for _ in range(M):
    print(add[input().rstrip()])

author : donghak park
contact :

## 문제의 저작권은 백준 알고리즘 사이트에 있습니다. 혹시 문제가 되는 부분이 있으면 연락 바랍니다.

비밀번호 생성기를 파이썬으로 만들어보자.

for문, random함수, random.shuffle(), random.sample(), list(), input(), int(), +=연산자, f-string 등

많은 파이썬 함수들이 쓰인다.

<사용할 문자, 특수기호, 숫자는 아래와 같다>

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']

numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

symbols = ['@', '*' '!', '#', '$', '-', '%', '&', '(', ')', '+']

비밀번호 생성기의 규칙

1. 비밀번호에서 문자, 특수기호, 숫자의 개수가 얼마나 되는지 입력을 받는다.
2. 해당 개수 만큼 뽑는다.
     2-1 중복되지 않게 뽑는다. 
     2-2 중복될 수 있게 뽑는다.
3. <1단계 비밀번호>는 단순히 문자 +특수기호 + 숫자를 조합하는 것이다.
4. <2단계 비밀번호>는 1단계 비밀번호를 랜덤하게 뒤섞어 비밀번호를 더 어렵게 만든다. 

1단계 비밀번호 생성하기

1. input()함수, int()함수

파이썬 비밀번호 문제 - paisseon bimilbeonho munje

먼저 input()함수를 사용하여 입력값을 얻는다. 

input()함수의 출력값은 str타입이므로, int()함수를 적용하여 문자형을 숫자형으로 변경한다. 

2-1. random.sample(seq, k) 함수

파이썬 비밀번호 문제 - paisseon bimilbeonho munje

random.sample(seq, k) 함수를 이용하여

seq > 리스트나 튜플 같은 시퀀스(순서)가 있는 것에서 k만큼 원소를 랜덤하게 뽑는다.

이 경우에는 뽑히는 원소들은 중복되지 않는다. 

예를 들어, 

[1,2,3]에서 2개를 랜덤하게 뽑을 때, 

1,2 

2,3

1,3 

이 뽑힐 수 있지만

1,1

2,2

3,3 등

같은 원소를 중복해서 뽑지는 않는다.

for 반복문, += 연산자

for문을 이용해서 리스트의 요소를 하나의 문자열로 합친다.

one+=b의 뜻은

one = one +b

와 같다.

파이썬 비밀번호 문제 - paisseon bimilbeonho munje

문자열 + 문자열의

최종 출력값의 타입은 문자열이다.

2-2. random.choice(seq) 함수

만약

비밀번호에 중복된 문자, 특수기호, 숫자가 있기를 원한다면,

random.choice()함수와 for문을 이용하면 된다.

파이썬 비밀번호 문제 - paisseon bimilbeonho munje

random.choice()함수는

순서 sequence가 있는 리스트나 튜플에서 하나의 원소를 뽑아준다.

3. f-string

파이썬 비밀번호 문제 - paisseon bimilbeonho munje

f-string을 이용해서 문장을 출력한다.

2단계 비밀번호 생성하기

4. list()

파이썬 비밀번호 문제 - paisseon bimilbeonho munje

 1단계 비밀번호를 무작위로 섞기 위해

random.shuffle()함수를 쓸 것인데,

섞을 대상이 문자열이 아닌 리스트의 형태여야 한다.

따라서 문자열 타입인 1단계 비밀번호를

list()함수를 이용해

다시 리스트로 바꾸어준다.

split()함수는 여러개의 문자열을 어떤 기준으로 쪼개어 리스트를 만들어주고

파이썬 비밀번호 문제 - paisseon bimilbeonho munje

list()함수는 문자열을 각각의 문자로 쪼개어 리스트를 만들어준다.

파이썬 비밀번호 문제 - paisseon bimilbeonho munje

5. random.shuffle()

파이썬 비밀번호 문제 - paisseon bimilbeonho munje

6. for문, f-string 출력하기

파이썬 비밀번호 문제 - paisseon bimilbeonho munje