본문 바로가기

알고리즘7

[백준] 2225번 [python] [백준] 2225번 [python] 문제 https://www.acmicpc.net/problem/2225 2225번: 합분해 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 해당문제는 DP문제로 점화식을 구하면 풀수있다. 해당 점화식을 구해보도록 하자 N = 4, K = 3라고 가정할때 정수 0을 만들기 위해 갯수 1개인경우는 (0), 1개 갯수 2개인경우는 (0,0), 1개 갯수 3개인경우는 (0,0,0) , 1개이다. 또한 정수 2를 만들기 위해 갯수 1개인경우는 (2), 1개 갯수 2개인경우는 (0,2), (0,2), (1,1), 3개 갯수 3개인경우는 (0,0,2), (0,2,0), (2,0,0), (0,1,1), (1,0,1), (1,1,0),.. 2020. 11. 3.
[프로그래머스] 징검다리 [프로그래머스] 징검다리 문제 https://programmers.co.kr/learn/courses/30/lessons/43236?language=python3 코딩테스트 연습 - 징검다리 출발지점부터 distance만큼 떨어진 곳에 도착지점이 있습니다. 그리고 그사이에는 바위들이 놓여있습니다. 바위 중 몇 개를 제거하려고 합니다. 예를 들어, 도착지점이 25만큼 떨어져 있고, 바위가 programmers.co.kr 나는 이분탐색문제가 나오면 조합으로 풀려는 아이디어가 가장 먼저 떠오른다. 실제로 테스트케이스의 범위가 제한적이라면 분명 조합으로 더 쉽게 풀수 있을것이다. 하지만 이분탐색의 문제는 범위가 굉장히 크고, 절대 조합으로 풀수없게 테스트케이스를 구성해놓는다. 이런점을 간과하고 문제를 풀때 조합.. 2020. 10. 24.
[프로그래머스] 지형이동 [프로그래머스] 지형이동 문제 https://programmers.co.kr/learn/courses/30/lessons/62050 코딩테스트 연습 - 지형 이동 [[1, 4, 8, 10], [5, 5, 5, 5], [10, 10, 10, 10], [10, 10, 10, 20]] 3 15 [[10, 11, 10, 11], [2, 21, 20, 10], [1, 20, 21, 11], [2, 1, 2, 1]] 1 18 programmers.co.kr 코드 이 문제는 최근에 풀었던 알고리즘 문제중에서 가장 어려웠던것같다. 우선 가장 처음에 문제에 접근할때 사다리 없이 이동 가능한 그룹끼리 그룹을 생성 현재 자리의 4방향을 탐색하면서 나와 다른 그룹을 경우 높이차를 측정 최소 높이차를 측정하여 결과를 구함 이 .. 2020. 9. 2.
[프로그래머스] 길찾기게임 [프로그래머스] 길찾기게임 문제 https://programmers.co.kr/learn/courses/30/lessons/42892 코딩테스트 연습 - 길 찾기 게임 [[5,3],[11,5],[13,3],[3,5],[6,1],[1,3],[8,6],[7,2],[2,2]] [[7,4,6,9,1,8,5,2,3],[9,6,5,8,1,4,3,2,7]] programmers.co.kr 코드 이 문제를 풀기위해 class를 이용한 트리구조생성과 전위순회, 후위순회를 다시한번 공부할수있었습니다. 우선 해당 문제의 조건에 맞게 class를 이용한 이진 트리(Binary Tree) 를 구현 이진트리의 각각의 노드의 property는 x, y, left, right, index를 갖고있습니다. 만들어진 이진트리에서 전회순.. 2020. 8. 28.
[프로그래머스] 자물쇠와 열쇠 자물쇠와 열쇠 문제 https://programmers.co.kr/learn/courses/30/lessons/60059 코딩테스트 연습 - 자물쇠와 열쇠 [[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true programmers.co.kr 코드 이 문제는 2차원배열의 범위가 작기때문에 모든 경우를 탐색하면 풀수있다. 하지만 모든 경우를 탐색하는것도 생각보다 어려웠다. 길이가 N인 2차원 배열 lock을 (M -1) * 2 + N 의 배열로 늘려서 lock을 가운데에 넣고 key를 0, 0부터 90도씩 회전시켜나가면서 모든 위치를 확인하면서 풀었다. empty_lock 함수를 통해 자물쇠에서 비어있는 위치와 잠겨있는 위치를 찾아.. 2020. 8. 27.
[백준] 2573 : 빙산 2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 � www.acmicpc.net 백준의 빙산 문제는 dfs나 bfs를 이용하여 풀수있는 문제다. 실제로 해당 개념을 활용하여 약 30분내로 문제를 다 풀었지만, 결과는 처참했다. 계속해서 런타임 or 시간초과가 뜨고 시간을 최대한 줄이기위해 재귀대신 반복문으로 사용하고, 가지치기를 하면서 시간을 줄이기 위해 노력했다. 하지만 4시간 가까이 수정했음에도 10번이 넘도록 시간초과가 뜬다..ㅠㅠ 혹시나 python3보다 더 빠른 pypy3로 돌려봤더니 단번에 성공하는걸보고 python과 p.. 2020. 7. 19.
[백준] 14890:경사로 백준의 14890: 경사로 https://www.acmicpc.net/problem/14890 14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 문제풀이 과정 1. 각각의 행과 열을 한 개씩 list형태로 함수에 집어넣는다. 2. 모든경우의 수를 생각해서 가지치기해준다. 처음 문제 풀 때는 어떤 자료구조 개념이 필요한지 고민했다. 약 1시간 정도 헤매다가 결국에는 하드코딩이 정답이라는 결론에 이르렀고, 모든 경우의 수를 생각하면서 가지치기를 해주는 코딩을 구현했다. 약 2시간 30분 걸림,,, 문제 자체는 어렵지 않은데 해결방법을 찾는.. 2020. 7. 6.