알고리즘 (PS)/BOJ

알고리즘 (PS)/BOJ

[백준] 30804 - 과일 탕후루

https://www.acmicpc.net/problem/30804 탕후루 꼬치에서 앞 뒤로 몇개의 과일을 빼 2가지 종류 이내로 구성된 가장 긴 길이의 탕후루 꼬치를 만드는 문제다.처음에는 단순 구현을 해야하나 싶어서 한참 고민했는데, 앞 뒤로 과일을 뺀다는 것은 남은 과일이 연속적이라는 점에서 힌트를 얻어 투 포인터를 생각해낼 수 있었다. 앞에서부터 과일을 하나씩 살펴보면서 2가지 종류가 되지 않았다면 연속된 길이에 포함하고, 2가지가 넘는 종류가 나오는 순간 그때까지 담은 길이를 정답 후보로 체크한다.그리고 그 이전에 담았던 과일 중, 제일 마지막에 나왔던 종류가 아닌 과일을 2가지 종류에서 제외하고, 새로 나온 종류를 2가지 종류에 추가한 뒤 위 과정을 반복한다. n = int(input())fr..

알고리즘 (PS)/BOJ

[백준] 17472 - 다리 만들기 2

https://www.acmicpc.net/problem/17472구현 + MST 섬의 위치가 격자판 모양으로 주어질 때, 격자판 모양으로부터 그래프를 직접 정의하고, 그 그래프에 대해 MST를 찾으면 됩니다.이런 복잡한 문제는 어떤 것들을 구현해야 하는지 잘 나눠서 생각하면 구현하기 좋습니다.(그래도 이 문제는 구현이 엄청 복잡한 편까지는 아닙니다.) 먼저 섬부터 찾아보겠습니다.섬을 찾는다는 것은 격자판을 그대로 그래프로 보았을 때, 컴포넌트를 찾는 것과 같습니다.# 섬 찾기island_number = 2island_tiles = []for i in range(N): for j in range(M): if board[i][j] == 1: # BFS ..

알고리즘 (PS)/BOJ

[백준] 1661 - 다솜이의 신발가게 (Python)

https://www.acmicpc.net/problem/1661 문제 분류를 봐도 아이디어를 떠올리기 힘들었던 문제분류를 보기 전까지는 자연스럽게 그리디가 계속 떠올랐다. 우선 N이 작기때문에 뭔가 다 해보면 될 것 같다는 생각은 든다.그런데 어떻게 다 해봐야할 지 감이 잘 안온다.이 문제를 풀 때는 한번 예제 입력 1번에 해당하는 케이스를 다 써보면 풀이를 떠올릴 수 있다. 예제 입력에 1번에 있는 물건 3개에 대해서 각각을 사는지 안사는지 경우의 수를 모두 따지면 이렇게 8가지가 나온다.이를 직접 손으로 다 쓰다보면 규칙이 보인다. 어쨌든 할인율은 결국 1, 2, 3 프로중 하나밖에 없다.그리고 최종 할인되는 가격은 어떤 물건을 먼저 사느냐에 상관없이 항상 기존 가격 * 각각의 할인율들의 곱으로 표..

알고리즘 (PS)/BOJ

[백준] 17780 - 새로운 게임 (Python)

요구사항에 맞게 구현하면 되는 문제오랜만에 풀어서 그런지 꽤 어려웠다.. 윷놀이 문제처럼 말을 이동하다가 다른 말을 만나면 쌓아야 하는데, 말을 쌓더라도 자신이 갖고있는 방향은 바뀌면 안된다. class Unit: def __init__(self, number, row, col, direction): self.number = number self.row = row self.col = col self.direction = direction def check_next(self): if self.direction == RIGHT: return self.row, self.col + 1 if self.dire..

알고리즘 (PS)/BOJ

[백준] 21609 - 상어 중학교 (Python)

https://www.acmicpc.net/problem/21609 21609번: 상어 중학교 상어 중학교의 코딩 동아리에서 게임을 만들었다. 이 게임은 크기가 N×N인 격자에서 진행되고, 초기에 격자의 모든 칸에는 블록이 하나씩 들어있고, 블록은 검은색 블록, 무지개 블록, 일반 블록 www.acmicpc.net BFS 를 활용하는 시뮬레이션 문제이다. 구현할 때 모든 조건을 꼼꼼히 살펴야하고, 작은 사소한 실수 하나로도 문제를 틀리기 때문에 난이도가 높다. N, M = map(int, input().split()) board = [list(map(int, input().split())) for _ in range(N)] score = 0 while True: x, y, size = find_block..

알고리즘 (PS)/BOJ

[백준] 20055 - 컨베이어 벨트 위의 로봇

https://www.acmicpc.net/problem/20055 20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net 간단한 시뮬레이션 문제이다. 나는 생각을 어렵게 해서 쌩 배열로 구현해서 그런지 구현이 빡셌지만.. 난이도 매기는 사람들 의견보니 구현은 쉬운편이라고.. 그냥 덱 자료구조로 하면 더 쉽게 할 수 있을 것 같다. Python 리스트 (배열) 사용 풀이 배열과 리스트는 다르지만 사실상 리스트를 배열처럼 활용하여 풀었다. 나는 2N 개의 배열을 미리 잡아두고 '올리는 위치(put_..

알고리즘 (PS)/BOJ

[백준] 3653 - 영화수집 (P4)

https://www.acmicpc.net/problem/3653 3653번: 영화 수집 각 테스트 케이스에 대해서 한 줄에 m개의 정수를 출력해야 한다. i번째 출력하는 수는 i번째로 영화를 볼 때 그 영화의 위에 있었던 DVD의 개수이다. 상근이는 매번 영화를 볼 때마다 본 영화 DVD www.acmicpc.net 세그먼트 트리 연습 문제로 풀게 된 문제 1시간을 고민해도 아이디어가 전혀 안 떠올라서 블로그 3~4개 풀이를 다 읽어보고 겨우 이해했다. 그리고 구현하는데 또 시간초과 나서 구현 디테일 수정하느라 30분은 또 쓴 것 같다. 영화를 볼 때마다 꺼낸 영화보다 위에 있던 영화들의 위치가 한칸씩 밀리는 것이 이 문제의 어려운 점이다. 이는 N+M개의 리프노드를 가지는 세그트리를 구현하여 해결할 ..

알고리즘 (PS)/BOJ

[백준] 2243 - 사탕상자 (P5)

https://www.acmicpc.net/problem/2243 2243번: 사탕상자 첫째 줄에 수정이가 사탕상자에 손을 댄 횟수 n(1 ≤ n ≤ 100,000)이 주어진다. 다음 n개의 줄에는 두 정수 A, B, 혹은 세 정수 A, B, C가 주어진다. A가 1인 경우는 사탕상자에서 사탕을 꺼내는 경우이 www.acmicpc.net 학교 동아리 스터디에서 세그트리 연습문제로 나와 풀게 되었다. 스터디 수업때 다뤘던 연습문제와 세그트리를 적용하는 결이 달라 한참 고민을 하고 풀었다. 보통 '세그먼트 트리' 하면 유명한 연습문제가 '구간 합 구하기' 이다. https://www.acmicpc.net/problem/2042 2042번: 구간 합 구하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,0..

알고리즘 (PS)/BOJ

[백준] 27172 - 수 나누기 게임 (G5)

https://www.acmicpc.net/problem/27172 27172번: 수 나누기 게임 《보드게임컵》을 준비하다 지친 은하는 보드게임컵 참가자들을 경기장에 몰아넣고 결투를 시키는 게임 《수 나누기 게임》을 만들었습니다. 《수 나누기 게임》의 규칙은 다음과 같습니다. www.acmicpc.net 에라토스테네스의 체를 구하는 과정을 응용하여 푸는 문제이다. 수가 10만개 이므로, 임의 두 수의 쌍을 모두 구해서 대결을 시키는 것은 시간내에 풀 수 없다. 1. 미리 1부터 100만까지 모든 수에 대한 점수를 저장할 리스트를 만들어 두고, None으로 초기화를 시켜둔다. (점수가 음수가 될 수 있기 때문이다) 2. 플레이어가 가진 수로 주어진 모든 수에 대해 점수를 0으로 설정한다. 3. 각 플레이어..

알고리즘 (PS)/BOJ

[백준] 30105 - 아즈버의 이빨 자국 (G5)

https://www.acmicpc.net/problem/30105 30105번: 아즈버의 이빨 자국 집안의 먹을 것들이 계속해서 사라지는 당신은 이웃집의 곰 아즈버(azber)를 의심하고 있다. 오늘, 당신은 드디어 결정적인 증거를 찾아냈는데, 그것은 바로 쵸코바에 찍힌 이빨 자국이었다! 당신 www.acmicpc.net 처음 문제를 읽었을 때는 감이 안왔는데, 시간 제한을 보고 브루트포스라는 감을 잡아 풀었다. N의 사이즈가 4000개이므로, 임의 2개의 점 사이 모든 간격을 구하는데 1.6 * 10^7 의 연산이 필요하고, 이는 3초안에 충분히 가능한 연산이다. 나는 임의 두점 x1, x2 사이의 거리를 구하고, 해시맵에 그 거리를 key 로 하여 그 거리를 구성한 점들을 set으로 저장했다. Ma..

에버듀
'알고리즘 (PS)/BOJ' 카테고리의 글 목록 (3 Page)