알고리즘 (PS)

알고리즘 (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

[백준] 2629 - 양팔저울 (G3)

https://www.acmicpc.net/problem/2629 2629번: 양팔저울 첫째 줄에는 추의 개수가 자연수로 주어진다. 추의 개수는 30 이하이다. 둘째 줄에는 추의 무게들이 자연수로 가벼운 것부터 차례로 주어진다. 같은 무게의 추가 여러 개 있을 수도 있다. 추의 무 www.acmicpc.net 추의 개수와 각 추의 무게가 주어졌을 때, 주어진 추들을 양팔 저울에 올려 측정할 수 있는 무게의 종류를 구하는 문제이다. 추를 양팔 저울의 한 쪽에만 올리는 경우와 다른 반대쪽에도 올릴 수 있는 경우가 있다는 점이 이 문제의 어려운 점이다. 측정하려는 무게를 x, 현재 사용하는 추의 무게를 w, 이전까지 측정한 적 있던 무게를 p 라고 하자. 그렇다면 측정하려는 무게를 양팔저울의 왼쪽에 놓았을 때..

알고리즘 (PS)/BOJ

[백준] 9370 - 미확인 도착지 (G2)

https://www.acmicpc.net/problem/9370 9370번: 미확인 도착지 (취익)B100 요원, 요란한 옷차림을 한 서커스 예술가 한 쌍이 한 도시의 거리들을 이동하고 있다. 너의 임무는 그들이 어디로 가고 있는지 알아내는 것이다. 우리가 알아낸 것은 그들이 s지점에서 www.acmicpc.net 한 노드에 대한 최단 경로에 특정 경로가 포함되어 있는지를 확인하는 문제이다. 아이디어는 어렵지 않은데, 구현이 복잡하다. 나는 처음에 다익스트라를 한번 돌리면서, 그 과정에 간선이 포함되는지를 체크하려고 하였다. 그런데 최단경로가 여러개인 경우, 간선이 포함된 최단 경로를 먼저 고르는 것을 구현하기가 어려워서 이 방법은 포기했다. (나중에 난이도 기여 내역을 보니 이렇게 푼 사람도 있었다...

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