본문 바로가기

전체 글

(26)
백준 2178번 : 미로 탐색(S1) https://www.acmicpc.net/problem/2178 내 코드from collections import dequeimport sysinput = sys.stdin.readlinedef main(): n, m = map(int, input().split()) maze = [list(input().strip()) for _ in range(n)] visited = [[False] * m for _ in range(n)] bfs(maze, visited) print(maze[n-1][m-1])def bfs(graph, visited): queue = deque() queue.append((0, 0)) rows = len(gra..
백준 1260번 : DFS와 BFS(S2) https://www.acmicpc.net/problem/1260문제그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다.입력첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다. 내 코드from collections import dequedef quick(..
백준 4779번 : 칸토어 집합(S3) https://www.acmicpc.net/problem/4779문제칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로, 구간 [0, 1]에서 시작해서 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만든다.전체 집합이 유한이라고 가정하고, 다음과 같은 과정을 통해서 칸토어 집합의 근사를 만들어보자.1. -가 3N개 있는 문자열에서 시작한다.2. 문자열을 3등분 한 뒤, 가운데 문자열을 공백으로 바꾼다. 이렇게 하면, 선(문자열) 2개가 남는다.3. 이제 각 선(문자열)을 3등분 하고, 가운데 문자열을 공백으로 바꾼다. 이 과정은 모든 선의 길이가 1일때 까지 계속 한다.예를 들어, N=3인 경우, 길이가 27인 문자열로 시작한다. 내 코드import sysfrom collections..
백준 11866번 : 요세푸스 문제 0(S4) https://www.acmicpc.net/problem/11866문제요세푸스 문제는 다음과 같다.1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 이다.N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 프로그램을 작성하시오. 내 코드import sysfrom collections import dequeinput = sys.stdin.readlinedef main() : ..
백준 1193번 : 분수찾기(S5) https://www.acmicpc.net/problem/1193내 코드import sysinput = sys.stdin.readlinedef main() : x = int(input()) level = 1 while x > level : x -=level level += 1 if (level % 2 == 0) : #짝수면 down upper = x under = (level+1) - x else : #홀수면 up upper = (level+1) - x under = x print(f"{upper}/{under}")if __name__ == "__main__" : main() 풀이시간
백준 18870번 : 좌표 압축(S2) https://www.acmicpc.net/problem/18870 문제수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다.X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자. 내 코드import sysinput = sys.stdin.readline def main() : n = int(input()) array = list(map(int, input().rstrip().split())) unique_array = list(set(array)) #중복제거 ans = [] ..
백준 10814번 : 나이순 정렬(S5) https://www.acmicpc.net/problem/10814 문제온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오. 내 코드import sysinput = sys.stdin.readline def main() : n = int(input()) data = [] for _ in range(n) : age, name = input().rstrip().split() data.append((int(age),name)) data.sort(key=lambda x:(x[0])) for i in data : ..
백준 1181번 : 단어정렬(S5) 문제알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.길이가 짧은 것부터길이가 같으면 사전 순으로단, 중복된 단어는 하나만 남기고 제거해야 한다. 내 코드import sysinput = sys.stdin.readline def main() : n = int(input()) data = [] for _ in range(n) : data.append(input().rstrip()) data = list(set(data)) data.sort(key=lambda x: (len(x),x)) for i in data : print(i) def test() : return 0i..