문제 https://www.acmicpc.net/problem/15663 문제 풀이 백트래킹,, 코드 import sys input = sys.stdin.readline N, M = map(int,input().split()) LIST = sorted(list(map(int,input().split()))) total = [] visited = [0 for _ in range(N)] def back(): if len(total) == M: print(*total) return ex = 0 for i in range(len(LIST)): if ex != LIST[i] and visited[i] == 0: total.append(LIST[i]) visited[i] = 1 back() ex = total.po..
알고리즘/백준 문제풀이
문제 https://www.acmicpc.net/problem/18352 18352번: 특정 거리의 도시 찾기 첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개 www.acmicpc.net 문제 풀이 단방향 그래프에서 최단거리 찾기 위해 bfs 돌림. visited를 따로 두고 풀었는데, 다른 분들 풀이 보니까 그냥 각 노드에 대한 distance 배열을 만들어서 최단거리로 차차 갱신하며 푸는 법이 일반적 + 더 효율적인듯 코드 import sys input = sys.stdin.readline impor..
문제 https://www.acmicpc.net/problem/11444 11444번: 피보나치 수 6 첫째 줄에 n이 주어진다. n은 1,000,000,000,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 문제 풀이 피보나치 수열을 구하는 방법 중에 수열을 이용한 방법을 구현함. 메모제이션을 사용하는 법도 기억해두자,, 참고 ref ) https://www.acmicpc.net/blog/view/28 피보나치 수를 구하는 여러가지 방법 피보나치 수는 다음과 같이 정의되는 수열입니다. $F_0 = 0$ $F_1 = 1$ $F_n = F_{n-1} + F_{n-2}$ 피보나치 수를 조금 써보면, 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144..
문제 https://www.acmicpc.net/problem/2589 2589번: 보물섬 첫째 줄에는 보물 지도의 세로의 크기와 가로의 크기가 빈칸을 사이에 두고 주어진다. 이어 L과 W로 표시된 보물 지도가 아래의 예와 같이 주어지며, 각 문자 사이에는 빈 칸이 없다. 보물 지도의 www.acmicpc.net 문제 풀이 bfs 문제로, 모든 땅에 대해서 가장 거리가 먼 육지를 bfs로 찾고 최대값을 갱신해가면서 완전탐색 돌리면 된다. 효율적인지는 모르겠음.. 코드 import sys input = sys.stdin.readline import collections H, W = map(int,input().split()) MAP = [list(input().strip()) for _ in range(H..
문제 https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 문제 풀이 bfs 문제로, 다음 이동할 위치를 위아래 3차원까지 고려해주면 된다. 답 분기가 많아서 헷갈렸음 코드 import sys input = sys.stdin.readline import collections M, N, H = map(int,input().split()) q = collections.deque() tomato_tower = [] to_ripe =..
문제 https://www.acmicpc.net/problem/17836 문제 풀이 시작점과 공주 위치가 고정되어 있음. 검을 찾고 공주한테 가는 경우와 바로 공주한테 가는 경우 둘 다 bfs로 구해서 비교하면 됨. fail하는 경우를 잘 걸러줘야함 코드 import sys input = sys.stdin.readline import collections ''' 검을 찾고 가는 경우와 공주한테 바로 가는 경우를 비교 ''' N, M, T = map(int, input().split()) INF = 100000 def bfs(MAP, start_x, start_y, target_x, target_y, flag=0): move = {(-1,0), (0,1), (1,0), (0,-1)} visited = [[..
문제 https://www.acmicpc.net/problem/14405 14405번: 피카츄 피카츄는 "pi", "ka", "chu"를 발음할 수 있다. 따라서, 피카츄는 이 세 음절을 합친 단어만 발음할 수 있다. 예를 들면, "pikapi"와 "pikachu"가 있다. 문자열 S가 주어졌을 때, 피카츄가 발음할 수 있는 문 www.acmicpc.net 문제 풀이 코드 1) 정규표현식 코드 2) 파이썬 문자열 내장함수 replace 사용 코드 1 import re import sys input = sys.stdin.readline S = input().strip() if re.fullmatch('(pi|ka|chu)+',S): print('YES') else: print("NO") 코드 2 impor..
풀이 bfs로 풀이함 문제 https://www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 코드 import sys input = sys.stdin.readline move = {(-1,0), (-1,1), (0,1), (1,1), (1,0), (1,-1), (0,-1), (-1,-1)} def bfs(MAP, x, y): q = [(x,y)] MAP[x][y] = -1 while q: x,y = q.pop(0) for tx, ty in move: nx ..