반응형

알고리즘 47

[이취코테] 미로 탈출

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) 자료구조를 이용하며 구체적인 동작 과정은 다음과 같다. 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 스택의 ..

[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

[이취코테] 왕실의 나이트

https://youtu.be/2zjoKjt97vQ 이 문제의 해설 영상이다. 문제 체스판과 같은 8 x 8 좌표 평면에서 나이트는 특정한 위치에서 다음과 같은 2가지 경우로 이동할 수 있다. 1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기 2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기 8 x 8 좌표 평면 상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하시오. (단, 좌표평면 밖으로는 나갈 수 없다.) 이때 행 위치는 1부터 8로 표현하며, 열 위치는 a부터 h로 표현한다. 입력 조건: 첫째 줄에 8 x 8 좌표 평면 상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 된 문자열이 입력된다. 입력 문자는 a1처럼 열과 행..

반응형