반응형

분류 전체보기 172

[BOJ] 14502 - 연구소

https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net import sys n, m = map(int, input().split()) graph = [list(map(int, sys.stdin.readline().rstrip().split())) for i in range(n)] temp = [[0] * m for i in range(n)] cnt = 0 result = 0 dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] def virus(x,..

알고리즘/BOJ 2022.01.19

[BOJ] 2667 - 단지번호붙이기

https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net import sys n = int(input()) graph = [list(map(int, sys.stdin.readline().rstrip())) for i in range(n)] visited = [[False] * n for i in range(n)] num = 1 result = [] cnt = 0 def dfs(x,y): global cnt if 0

알고리즘/BOJ 2022.01.16

[BOJ] 18352 - 특정 거리의 도시 찾기

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 from collections import deque import sys n, m, k, x = map(int,input().split()) graph = [[] for i in range(n + 1)] distance = [-1] * (n + 1) check = False def bfs(x): queue = deque([x..

알고리즘/BOJ 2022.01.16

[이취코테] 미로 탈출

https://www.youtube.com/watch?v=7C9RgOcvkvo 이 문제의 해설 영상이다. 문제 N x M 크기의 직사각형 형태의 미로에 여러 마리의 괴물이 있어 이를 피해 탈출해야 한다. 현재 위치는 (1, 1)이고 미로의 출구는 (N, M)의 위치에 존재하며 한 번에 한 칸씩 이동할 수 있다. 괴물이 있는 부분은 0으로, 괴물이 없는 부분은 1로 표시되어 있다. 미로는 반드시 탈출할 수 있는 형태로 제시된다. 탈출하기 위해 움직여야 하는 최소 칸의 개수를 구하라. (칸을 셀 때는 시작 칸과 마지막 칸을 모두 포함해서 계산한다) 입력 조건: 첫째 줄에 두 정수 N, M(4 = m: continue if graph[nx][ny] == 1: graph[nx][ny] = graph[x][y] ..

[이취코테] 음료수 얼려 먹기

https://www.youtube.com/watch?v=7C9RgOcvkvo 이 문제의 해설 영상이다. 문제 N × M 크기의 얼음 틀이 있다. 구멍이 뚫려 있는 부분은 0, 칸막이가 존재하는 부분은 1로 표시된다. 구멍이 뚫려 있는 부분끼리 상, 하, 좌, 우로 붙어 있는 경우 서로 연결되어 있는 것으로 간주한다. 이때 얼음 틀의 모양이 주어졌을 때 생성되는 총아이스크림의 개수를 구하는 프로그램을 작성하라. 입력 조건: 첫 번째 줄에 얼음 틀의 세로 길이 N과 가로 길이 M이 주어진다. (1

[BOJ] 4673 - 셀프 넘버

https://www.acmicpc.net/problem/4673 4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, www.acmicpc.net def func(n): sum = 0 while(n >= 10): sum += n % 10 n = n // 10 sum += n return sum data = set() not_self = set() for n in range(1, 10001): data.add(n) result = n + func(n) not_self.add(result) re..

알고리즘/BOJ 2022.01.14

[알고리즘 이론] 탐색 알고리즘 - DFS / BFS

탐색이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 의미한다. 프로그래밍에서는 그래프, 트리 등의 자료구조 안에서 탐색을 하는 문제를 자주 다룬다. 대표적인 탐색 알고리즘으로 DFS와 BFS를 꼽을 수 있다. 깊이 우선 탐색(DFS, Depth - First Search) DFS는 Depth - First Search, 깊이 우선 탐색이라고도 부르며, 그래프와 트리의 깊은 부분을 우선적으로 탐색하는 알고리즘이다. 그림에서와 같이 갈 수 있는 한 끝까지 탐색해 리프 노드를 방문하고, 이전 갈림길로 돌아와 선택하지 않았던 노드를 방문하는 식으로 탐색한다. DFS는 스택(Stack) 자료구조를 이용하며 구체적인 동작 과정은 다음과 같다. 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 스택의 ..

[자료구조] 스택(Stack)과 큐(Queue) 파이썬으로 구현하기

스택(Stack)과 큐(Queue)는 데이터를 임시 저장하기 위해 사용하는 자료구조이며, 데이터를 입력하고 출력하는 방향이 정해져 있다는 점이 서로 비슷하다. 스택(Stack) 스택은 선입후출(FILO) 방식을 따르는 자료구조이다. 선입후출(FILO)은 First In , Last Out 말그대로 먼저 들어온 데이터가 나중에 나가는 방식인데 박스 쌓기에 비유할 수 있다. 흔히 박스는 아래에서부터 위로 차곡차곡 쌓고 박스를 치울 때는 위에 있는 박스부터 내리는 것과 같다. 파이썬에서 스택을 이용할 때는 별도의 라이브러리를 사용할 필요가 없이 리스트 자료형을 사용하여 스택을 구현한다. append() 메소드는 리스트의 가장 뒤쪽에 데이터를 삽입하고, pop() 메소드는 리스트의 가장 뒤쪽에서 데이터를 꺼내기..

Python/자료구조 2022.01.10

[BOJ] 5622 - 다이얼

https://www.acmicpc.net/problem/5622 5622번: 다이얼 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다. www.acmicpc.net data = input() array = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ'] sum = 0 for i in data: for j in array: if i in j: sum += array.index(j) + 3 break print(sum) 이 문제의 전제 조건을 보면 하나의 문자를 처리하면 원래의 위치에서 다시 시작해야 하므로 모든 입력을 처리하는데 걸리는 시간은 문자열의 순서와는 상관없이 똑같다는 것을 알 ..

알고리즘/BOJ 2022.01.09

[BOJ] 1157 - 단어 공부

https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 나의 코드 data = input() data = data.upper() count = [0] * 26 for i in data: index = ord(i) - ord('A') count[index] += 1 max = 0 for i in range(len(count)): if max < count[i]: max = count[i] max_alpha = i result = chr(ord('A') + max_alpha) count...

알고리즘/BOJ 2022.01.06
반응형