728x90

풀이 21

백준 12026번 BOJ거리 풀이/코드 (파이썬, 156ms) 다이나믹 프로그래밍!

코드만 궁금한 분은 깃허브링크 눌러주세요! GitHub - Rhyankwon/algorithms Contribute to Rhyankwon/algorithms development by creating an account on GitHub. github.com 문제 설명 문제 해결 논리 다이나믹 프로그래밍이 항상 그렇듯, 변수 리스트 몇개 설정하고 적당히 잘 ..섞어서 풀면 된다. 나같은 경우에는 0. 처음문자부터 끝문자까지 각각 방문하는데에 필요한 최소에너지를 저장하는 리스트를 생성한다. 1. 우선 BOJ순서대로만 점프할 수 있으므로 딕셔너리에 J->O, O->B, B->J를 호출할 수 있게 키/값으로 저장해둔다. 2. 어떤 문자를 호출하는 경우 앞쪽의 모든 경우를 다 호출해야 하므로 B, O, J각각..

백준 1890번 점프 해설/코드 (파이썬) 다이나믹 프로그래밍 문제

문제 풀이 코드만 궁금한 분은 깃허브링크 눌러주세요,,!! GitHub - Rhyankwon/algorithms Contribute to Rhyankwon/algorithms development by creating an account on GitHub. github.com 문제 설명 문제 해결 논리 어차피 값들은 아랫쪽, 오른쪽으로만 진행할 수 있다. 따라서 맨 윗 행은 왼쪽 값들에만 영향을 받고 맨 왼쪽 열은 윗쪽 값들에만 영향을 받는다. 따라서 0행부터 N행까지, 왼쪽부터 오른쪽으로 차근차근 계산해나가면 우리가 원하는 답을 얻을 수 있다. 1. 문제에서 주어진 게임판과 똑같은 크기의 0으로만 구성된 리스트 dp를 만들고 시작부분 (0,0)을 1로 표시한다. 이건 해당 요소로 갈 수 있는 경우의 수..

백준 1743번 음식물 피하기 풀이/코드 (파이썬) 기본 스택 문제

코드만 궁금한 분은 깃허브링크 문제 설명은 스킵하겠습니다. 문제 해결 논리 1. 주어진 크기만큼 (N, M)의 격자를 만들고 해당 리스트는 모두 0으로 초기화해둔다. 2. 쓰레기가 있다고 입력되어지는 행/열의 격자 부분을 1로 바꾼다. 3. 격자의 각 요소가 1인지 확인 후 만일 1이면 인접 요소중에 1이 있나 확인하고 0으로 바꾼다. 4. 인접 요소중에 더이상 1이 없으면 그때까지 1이였던 요소의 갯수를 저장한다. 5. 저장한 쓰레기 갯수 리스트에서 가장 큰 값을 출력한다. 사실 거의 비슷한 스택문제를 오늘 벌써 두개나 풀어서 이 문제를 풀까말까 고민을 많이 했다. 근데 그냥 이전 코드 살짝 바꾸고 살짝 추가하면 될것같아서 풀었다.

백준 2178번 미로 탐색 풀이/코드 (파이썬) 우선순위큐/힙/스택 활용문제

코드만 궁금한 분은 깃허브링크 문제 설명은 스킵하겠습니다..! 문제 해결 논리 1. 스택에 [1, 0, 0] 넣은 후 1 -> 0 으로 표지(재방문 막기위해서). 이 때 [0, 0]은 시작점이고 1은 지금까지 지나온 노드의 갯수를 세기 위해서 저장한다. 2. 인접 요소 중 1로 표지돼있는 요소의 행/열값과 지금까지 지나온 노드의 수(이번의 경우에는 2)를 스택에 넣고 해당 요소를 1 -> 0으로 변경한다. 3. 스택을 힙으로 활용해, 지금까지 방문했던 수가 가장 작은 값을 스택에서 꺼내서 1~2번을 다시 반복한다. 가령 지금 [4,2,1]이라면, 0,0에서 2,1까지 오는데 총 4개의 요소 (예를 들자면 [0, 0], [1,0], [2,0], [2,1])를 지났다는 뜻이다. 이 문제를 우선순위 큐를 사용..

백준 1303번 전쟁 풀이/코드 (파이썬) 기본 스택 활용문제

코드만 궁금한 분은 깃허브링크 문제 설명은 스킵하겠습니다. 문제 해결 논리 1. 반복문으로 처음부터 끝 요소까지 W인지 B인지 확인 하는데, 2. 이 때 인접한 요소가 앞서 확인한 요소 (W 혹은 B)와 동일한지 확인 후 3. 만일 같으면 계속 인접 요소중에 같은 알파벳이 있는지 확인하면서 갯수 확인. 4. 값을 계산해야하니까 W리스트, B리스트를 만들어서 W인경우 B인경우의 갯수^2를 각각 저장해둔다. 5. 각 리스트의 합을 출력하면 끝

백준 1260번 DFS와 BFS 풀이/코드 (파이썬) 자꾸 오류가 나는 경우 간단한 해결 방법

일단 코드만 궁금한 분은, 언제나 처럼 깃허브링크 GitHub - Rhyankwon/algorithms Contribute to Rhyankwon/algorithms development by creating an account on GitHub. github.com 정말 간단한.. 기본중의 기본탐색문제이다. 이거 못풀면 아무- 그래프 문제도 못 푼다고 보면 된다..라고 생각했는데 날 거의 3시간 가량 괴롭혔다. 하지만 여전히, 엄청 엄청 기초문제라는 사실은 변하지 않는다. 우선 어떻게 푸는지 설명 대강 하고, 마지막에 왜 내가 세시간 날려먹었나 한을.. 풀도록 하겠-다. 내가 푼 논리 (그냥 bfs dfs라 사실 논리랄것도없지만) 0. 미리 딕셔너리나 리스트에 각 노드마다 어떤 노드와 연결돼있는지 저장..

백준 2667번 단지번호붙이기 문제 해설/풀이/코드 (파이썬) 기본 스택 문제

코드만 궁금한 분은 깃허브링크 제목에 쓴것처럼 기초 스택문제이다. 주어진 이중리스트는(이하 격자) 1과 0으로 구성돼있다. 해당 격자에서 1끼리 서로 인접해있는 경우 그걸 한 덩이로 봤을때 총 몇 덩이가 있고 각각 몇개의 격자로 구성돼있는지를 알아내야하는 문제이다. 문제 풀기 1. 이중 for문으로 모든 요소에 대해서 1인지 확인. 2. 만약 1인 요소 찾으면 스택에 넣고 근처에 인접한 요소중에 1이 있는지 확인하기 2. 이 때 이미 1을 찾은 부분은 0으로 표시하고 1->0으로 바꾼 갯수를 센다. 4. 근처 인접한 요소에 더이상 1이없으면 갯수 저장하고 1번부터 반복. 기본중의 기본중의 기본 스택문제이다. 이거 못풀면 아무 스택문제도 못푼다고 보면된다. 다시 말하면 스택 기본 연습하기에 좋은 문제.

백준 1038번 감소하는 수 풀이/해설/코드 (파이썬) 다소 까다로운 재귀 + 구현문제

코드만 궁금한 분은 링크 GitHub - Rhyankwon/algorithms Contribute to Rhyankwon/algorithms development by creating an account on GitHub. github.com 문제 풀이는 스킵! 우선 문제를 보면 바로 알겠지만 적당히 재귀나..브루트포스같은걸 활용하면 되겠거니 싶지만 구현이 다소 귀찮거나 어려울거라는 감이 딱 오는..문제이다. 내가 푼 방법은 두개가 있는데, 위의 풀이부터 설명하자면 1. 10의자리까지만 감소하는 수가 가능하므로 1~10의 자릿수..의 길이에 따라서 반복하는데, 2. 맨 앞자리는 아무 숫자나 와도 되고, 그 뒤부터는 앞자리보단 작은 수가 오도록 한다. 3. 자릿수가 전부 채워질 때마다 숫자를 1씩 카운트 ..

백준 2294번 동전 2 풀이/해설/코드 (파이썬) 다이나믹 프로그래밍을 활용해보자

코드만 궁금한 분은 깃허브링크 사실 내가 dp를 잘 하는 편은 아닌데 2293번 어제 푼거를 머릿속에 생각해보면서 푸니까 그래도 다소 어렵지 않게 풀 수 있었다. 문제를 대충 알려주자면, 1, 2, 5 이런식으로 무작위의 숫자들과 다른 숫자 임의의 숫자 하나가(예시를 들기 위해 10으로 한다.) 주어진다. 이 때 앞쪽에 주어진 숫자 1, 2, 5들을 이용해 10을 구성하는데 그 때 가장 적은 수로 숫자들을 이용하는 경우를 반환하면 된다. 말이 좀 이상한데, 간단히 얘기해서 10은 1을 10번 써도 되지만 5를 2번 써도 된다. 그럼 2가 더 작으니까 답은 2가 된다. 문제 풀기 1. 구성해야 하는 숫자 N의 길이만큼의 리스트를 미리 만든다. 2. 앞에 무작위로 주어졌던 숫자들 중 작은 수부터 활용해서, ..

백준 1700번 멀티탭 스케줄링 문제 해설/코드 (파이썬)

코드만 궁금한 분은 링크 GitHub - Rhyankwon/algorithms Contribute to Rhyankwon/algorithms development by creating an account on GitHub. github.com 문제는 간단하다. N크기의 리스트가 있고 거기에 주어진 순서대로 숫자들을 넣으면 된다. 당연히, 이 때 이미 리스트 안에 있는 숫자는 순번을 pass하면 되고 그렇지 않은 경우는 안쪽의 수를 꺼내고 지금의 숫자를 리스트 안에 넣어야 한다. 문제에서 요구하는 답은, 이 때 리스트 안의 수를 제거하는 횟수의 최솟값이다. 이 때 최소한으로 리스트 안의 값을 제거하려면 다음과 같은 로직이 필요하다. 1. 이후에 다시 등장하지 않는 수를 제거하는게 최선 2. 가장 멀리 떨어..

728x90