728x90

코딩테스트 103

백준 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로 표시한다. 이건 해당 요소로 갈 수 있는 경우의 수..

백준 13549번 숨바꼭질3 풀이/코드 (파이썬) 우선순위 큐를 활용한 bfs문제!

코드만 궁금한 분은 깃허브링크 눌러주세요! GitHub - Rhyankwon/algorithms Contribute to Rhyankwon/algorithms development by creating an account on GitHub. github.com 문제 설명 숨바꼭질2 문제와 많이 비슷하다. 숨바꼭질2 문제와 다른점은 이번엔 2*x의 위치로 가는 경우에는 시간추가가 되지 않고, 그리고 움직이는 경우에 따라 움직이는 횟수와 관계없이 시간에 차이가 생기게되면서 이번엔 최소의 시간..값을 찾는 프로그램을 만들어야 한다. 문제 해결 논리 1. 현재의 위치에서 +1, -1, *2만큼 한 경우 이동하는 위치와 그 때마다 지나는 시간을 큐에 저장한다. 2. 큐에서 시간이 가장 작은걸 꺼내서 다시 1번을 ..

(파이썬) 프로그래머스 9주차 위클리챌린지, 전력망을 둘로 나누기 해설/풀이/코드 그래프 탐색문제

코드만 궁금한 분은 깃허브링크 GitHub - Rhyankwon/algorithms Contribute to Rhyankwon/algorithms development by creating an account on GitHub. github.com 문제 설명 ㄱㄱ 문제는 읽어보시고, 어.. 간단히 설명하면, 1. 트리가 하나 주어지는데 거기에서 어느 간선 하나를 자른다. 2. 이 때 주어진 트리는 두개의 다른 트리로 나뉘어지는데 3. 두 트리의 노드의 갯수 차이가 최소인 경우를 찾아서 그 차이값을 리턴하면 된다. 다음은 내가 풀이한.. 문제 해결 논리이다. 간단히 얘기하자면 양쪽 노드의 갯수 균형이 적당히 맞는 트리를 만들면서 그 때의 최상단 노드를 찾고 그 노드의 자식노드 중 하나를 잘라내면 된다. 1..

백준 12851 숨바꼭질 2 문제 풀이/해설/코드 (파이썬) 생각보다 간단한 큐, bfs 문제

코드만 궁금한 분은 깃허브링크 GitHub - Rhyankwon/algorithms Contribute to Rhyankwon/algorithms development by creating an account on GitHub. github.com 문제 설명은 스킵! 개인적으론 문제 이해는 쉬운데 풀기는 조금 까다로웠달까.. 문제 해결 논리 1. 큐에 0, 시작값 넣기. 0을 넣는 이유는 연산의 수를 기록해야하기때문. 2. 큐에서 시작값을 빼고 거기에 -1, +1, *2 한 값을 다시 큐에 넣는다. 이 때 1을 같이 넣어준다.(연산 횟수 = 0 + 1 = 1) 3. 2번을 반복하는데 이 때 힙을 사용해서 연산횟수가 작은 순서대로 꺼낸다.(우선순위 큐) 4. 이렇게 하면n번의 횟수만에 시작값에서 우리가 원..

백준 2606번 바이러스 문제 풀이/해설/코드 (파이썬) 사이클을 확인하는 문제.

코드만 궁금한 분은 깃허브링크 GitHub - Rhyankwon/algorithms Contribute to Rhyankwon/algorithms development by creating an account on GitHub. github.com 문제 해결 논리 1. 1번 컴퓨터를 방문 표시 후 2. 1번 컴퓨터에 연결된 다른 컴퓨터 모두 스택에 넣기. 3. 스택에 들어가있는 컴퓨터 하나씩 꺼내서 아직 방문 표시가 안돼있으면 다시 스택에 넣기 반복 4. 스택에 남은 값이 더이상 없는 경우 방문표시돼있는 컴퓨터의 갯수 - 1 (1번 컴퓨터는 제외)값을 출력한다. 기본적인 그래프문제.

리트코드, 백준 그리고 프로그래머스의 차이. 코딩테스트 연습 사이트를 비교해보면?

항상 이 주제로 글을 쓰고 싶었는데 드디어 쓴다. 우선 개발을 해야 하는 직군에서 일을 하고 싶은 사람이라면 코딩테스트가 뭔지 알거고, 코딩테스트 라는것에 대해서 준비를 해볼까-라고 한번이라도 생각해본 사람이라면 위 사이트 세개를 들어봣을 것 같다. 적어도 저 세개 중 한개는 들어봤을 거고, 여기에서 더 나아가면 삼성sw아카데미까지 들어봤을 것 같다. 위 세개의 웹사이트는 모두 코딩테스트를 준비중인 사람을 위한 웹사이트이지만 조금씩 차이가 있다. 나는 각각의 웹사이트에서 적어도 몇십문제씩은 풀어봤고, 그렇게 위 웹사이트들을 활용해서 코딩테스트 공부를 하면서 느낀 점을 오늘 공유해볼려고 한다. 우선 세 웹사이트의 공통점에 대해서 먼저 말을 하겠다. 공통점?.. 코딩테스트 공부하는 웹사이트라는점. 나머진 다..

코딩테스트 2021.10.06

백준 16953 A -> B 풀이/코드 (파이썬) 간단한 dfs문제!

문제 코드만 궁금한 분은 깃허브링크 문제 설명 : 1. [2, 162]와 같이 임의의 두 수가 주어진다. 2. 앞의 수를 2배 하거나 앞의 수의 끝에 1을 붙일 수 있다. 가령 2는 4가 될수도 있고 21이 될 수도 있다. 3. 이 때 2번의 방식을 반복해서 앞의 수를 뒤의 수로 만들 수 있다면 몇 차례나 반복해야하는지를 출력하고, 만일 만들 수 없으면 -1을 출력한다. 문제 해결 논리: 1. 두 수를 받는다. 2. 앞의 수, 0(연산 횟수)을 dfs함수에 넣는다. 3. dfs 함수에서는 다시한번 해당 함수를 2회에 걸쳐 호출하는데(재귀함수), 한번은 입력값*2를, 다른 한번은 입력값+문자열(1)을 각각 dfs에 입력값으로 넣는다. 4. 이 때 dfs함수에 또다른 입력 값으로, 연산 횟수를 넣는다. 가령..

백준 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. 각 리스트의 합을 출력하면 끝

728x90