Algorithm Study/Python

    [백준 파이썬] # 15651 N과 M (3)

    Silver III # 15651 N과 M (3) 링크 : https://www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 풀이 N, M = map(int, input().split()) def dfs(depth, seq): if depth == M: print(' '.join(list(map(str, seq)))) return for i in range(1, N+1): seq.append(i) dfs(depth+1, seq) seq.pop() dfs(0, ..

    [백준 파이썬] # 15649 N과 M (1)

    Silver III # 15649 N과 M (1) 링크 : https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 풀이 N, M = map(int, input().split()) def dfs(depth, seq): if depth == M: print(' '.join(list(map(str, seq)))) for i in range(1, N+1): if i not in seq: temp = seq.copy() temp.append(i) dfs(de..

    [백준 파이썬] # 10809 알파벳 찾기

    Bronze II # 10809 알파벳 찾기 링크 : https://www.acmicpc.net/problem/10809 10809번: 알파벳 찾기 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출 www.acmicpc.net 풀이 S = list(input()) alphabet = list('abcdefghijklmnopqrstuvwxyz') li = [] for i in alphabet: if i in S: li.append(S.index(i)) else: li.append(-1) print(*li) 풀이 방법 alphabet을 정의한다 S에서 alp..

    [백준 파이썬] # 2675 문자열 반복

    Bronze II # 2675 문자열 반복 링크 : https://www.acmicpc.net/problem/2675 2675번: 문자열 반복 문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다 www.acmicpc.net 풀이 T = int(input()) for i in range(T): R, S = input().split() P = '' for j in S: P += j*int(R) print(P) 풀이 방법 문자열 P를 이용한다. P에 문자를 추가하기 위해서 '+='를 이용한다. 후기 문자열로 받아 사용하면, 리스트에 append 후 프린트 하는 ..

    [백준 파이썬] # 7562 나이트의 이동

    Silver II # 7562 나이트의 이동 링크 : https://www.acmicpc.net/problem/7562 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net 풀이 from collections import deque def bfs(x, y): if (loc_x, loc_y) == (des_x, des_y): return 0 else: q = deque() q.append((x, y)) dx = [1, 2, 2, 1, -1, -2, -2, -1] dy = [2, 1, -1, -2, -2, -1, 1, ..

    [백준 파이썬] # 1697 숨바꼭질

    Silver I # 1697 숨바꼭질 링크 : https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 풀이 from collections import deque def bfs(n, k): q = deque([n]) while q: pop = q.popleft() if pop == k: return visited[pop] for i in [pop-1, pop+1, 2*pop]: if 0

    [백준 파이썬] # 1158 요세푸스 문제

    Silver V # 1158 요세푸스 문제 링크 : https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 풀이 from collections import deque N, K = map(int, input().split()) queue = deque(list(range(1, N+1))) li = [] while queue: for i in range(K-1): pop = queue.popleft() queue.append(pop) insert = queue.popleft() li.append(insert) li = str(li).replace..

    [백준 파이썬] # 7569 토마토

    Silver I # 7569 토마토 링크 : https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 풀이 M, N, H = map(int, input().split()) house = [] floor = [] for k in range(H): floor = [list(map(int, input().split())) for i in range(N)] house.append(floor) ## from collections impor..

    [백준 파이썬] # 7576 토마토

    Silver I # 7576 토마토 링크 : https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 풀이 M, N = map(int, input().split()) house = [list(map(int,input().split())) for i in range (N)] from collections import deque def bfs(graph): queue = deque() # key_iea for x in range(M): fo..

    [백준 파이썬] # 2178 미로 탐색 (BFS 풀이)

    Silver I # 2178 미로탐색 (BFS 풀이) 링크 : https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 풀이 (BFS) from collections import deque N, M = map(int, input().split()) # M: 가로(열 인덱스), N: 세로(행 인덱스) graph = [] for i in range(N): line = list(map(int, input())) graph.append(line) def bfs(x, y): queue = de..