728x90
반응형

Kotlin/Algorithm Problems 129

<백준> 치킨 배달(Gold 5)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/baekjoon%20%EB%AC%B8%EC%A0%9C%EC%A7%91/%EC%B9%98%ED%82%A8%20%EB%B0%B0%EB%8B%AC [백준] https://www.acmicpc.net/problem/15686 요즘 백준 문제만 풀고 있는 거 같다. 이 문제는 처음 딱 보고 '풀 수 있을까?' 싶었지만 딱 방법이 떠오르고 나서는 한방에 통과했다. 걱정이 앞섰던 이유는 바로 문제가 좀 길었고 예제가 바로 이해가 안 되고 그냥 치킨 거리가 작은 거 말고 최대 치킨집 개수의 최소 치킨 거리를 구하라고 해서였다. 알고리즘 문제를 풀다보면 나오는 최대, 최소가 나를 불안하게 만들 때가 많았기에 그랬다...

<백준> 하노이 탑 이동 순서(Gold 5)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/baekjoon%20%EB%AC%B8%EC%A0%9C%EC%A7%91/%ED%95%98%EB%85%B8%EC%9D%B4%20%ED%83%91%20%EC%9D%B4%EB%8F%99%20%EC%88%9C%EC%84%9C [백준] https://www.acmicpc.net/problem/11729 저번에 프로그래머스에서도 나왔던 문제였는데 거의 비슷하게 나와서 다시 복습하는 문제였다. 이제는 이 구조가 자연스럽게 손으로 나온다. n개를 옮기려고 할 때 n-1개를 먼저 다른 기둥에 옮겨놓고 1개를 옮긴다음 다른 기둥에 옮겨놓은 n-1개를 목표 기둥에 옮기는 것..!! 중간에 이동 경로를 저장하려면 n이 1일..

<백준> LCS(Gold 5)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/baekjoon%20%EB%AC%B8%EC%A0%9C%EC%A7%91/LCS [백준] https://www.acmicpc.net/problem/9251 개념을 잘 모를 때는 접근조차 힘들었지만 개념을 이해하고 나니까 매우 쉬운 문제였다. 다이나믹 프로그래밍을 이용해서 했다. 다이나믹 프로그래밍을 이용하지 않았다면 시간초과가 될 게 눈이 아른아른 보였기 때문이다. 한바퀴를 돌면서 값을 갱신시키는 방식이었는데 현재 인덱스에서 문자열의 값이 같은지 보고 이에 맞춰 코드를 수행하도록 짰다. 같을 때는 이전까지의 값에서 1을 더해줬다. 다를 때는 지금까지 오는 2가지 루트에서 큰 값을 저장했다. 현재 문제는 ..

<백준> 암호 만들기(Gold 5)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/baekjoon%20%EB%AC%B8%EC%A0%9C%EC%A7%91/%EC%95%94%ED%98%B8%20%EB%A7%8C%EB%93%A4%EA%B8%B0 [백준] https://www.acmicpc.net/problem/1759 정말 제출하고 많이 틀린 문제였다. 혼자 테스트하면서, 제출하고 나서를 합치면 8번...? 접근 자체는 쉽게 떠올랐다. '모음 따로, 자음 따로 개수를 골라서 넣지 말고 일단 총 문자에서 원하는 개수만큼 뽑은 다음에 모음의 개수와 자음의 개수를 확인하자!' 입력은 쉽게 받았고 입력값을 CharArray로 바꿔 바로 받기 위해 filter를 사용해봤다. 그리고 조합 합수를 ..

<백준> 토마토(Gold 5)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/baekjoon%20%EB%AC%B8%EC%A0%9C%EC%A7%91/%ED%86%A0%EB%A7%88%ED%86%A0(7569) [백준] https://www.acmicpc.net/problem/7569 뭔가 익숙하다 했더니 이전에 쉬운 버전의 토마토 문제를 풀어본 적이 있더라 그런데 이름이 똑같아서 깃허브에 저장할 때 에러나고 순간 당황했다...ㅎ 그 문제와 다른 점은 상자가 높이를 가지는 3차원이라는 것과 2차원 상의 상하좌우말고 높이의 위아래도 체크해야한다는 것이었다. 입력이 가장 어려울 줄 알았는데 생각보다 쉽게 접근해서 해결했다. 그래도... Array는 익숙해지지 않는다. 지연초기화하고 ..

<백준> 적록색약(Gold 5)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/baekjoon%20%EB%AC%B8%EC%A0%9C%EC%A7%91/%EC%A0%81%EB%A1%9D%EC%83%89%EC%95%BD [백준] https://www.acmicpc.net/problem/10026 생각보다 쉬운 문제였다. 기본적인 BFS만 알고 있으면 거기에 조건만 추가하여 구현할 수 있다. 이번에 2차원 배열을 입력받아야 했는데 이번에는 또 저번과는 다르게 CharArray로 한줄을 변환하고 그걸 배열에 집어넣는 식으로 했다. 문자 하나하나 들어가야하는 2차원배열에서는 앞으로 이 방식을 사용해야겠다. 그리고 이제 함수들을 만들었다. 2차원 배열을 돌면서 시작점이 될 수 있는지 확인하..

<백준> 리모컨(Gold 5)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/baekjoon%20%EB%AC%B8%EC%A0%9C%EC%A7%91/%EB%A6%AC%EB%AA%A8%EC%BB%A8 [백준] https://www.acmicpc.net/problem/1107 정말 집에 리모컨이 있었다면 부셔버리고 싶었던 문제였다... 이전에 자바로 문제를 풀 때 한번 문제를 읽고 쉽지 않을 거 같아 그냥 넘겼던 문제인 거 같은데 이렇게 코틀린으로 마주 보니 똑같이 쉽지 않아 보였다. 처음에는 BFS인가 생각하다가 그렇게 되면 너무 경우의 수가 늘어나서 감당할 수 없을 거 같기도 하고 알고리즘 분류가 완전탐색으로 되어있어서 그쪽으로 생각을 틀었다. 그런데 어떻게 완전탐색을 해야하나..

<백준> AC(Gold 5)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/baekjoon%20%EB%AC%B8%EC%A0%9C%EC%A7%91/AC [백준] https://www.acmicpc.net/problem/5430 이 문제 무려 4달 전에 풀었었던 문제다. 하나도 기억이 안 났다. 거기에 자바로 풀었더라 그래서 새로운 마음으로 시작했다. 예외처리는 수행해야하는 함수의 D의 개수와 주어진 숫자의 개수를 비교했다. 문제를 보자마자 생각이 든 건 '이거 삽입 삭제가 좀 많으니까 StringBuilder를 쓰면 좋지 않을까?' 였다. 그래서 이를 기반으로 반복문을 돌려 StringBuilder의 함수들을 사용했다. 그런데 제출하니까 시간초과가 나오더라... 아마도 rev..

<프로그래머스> 하노이의 탑(Lv.2)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/%ED%95%98%EB%85%B8%EC%9D%B4%EC%9D%98%20%ED%83%91 [프로그래머스] https://school.programmers.co.kr/learn/courses/30/lessons/12946 학교에서나 혼자 문제 풀 때 많이 봤었던 하노이 탑 문제였다. 그 때는 참 순서가 이해가 잘 이해가 안 갔었는데... 지금 와서 보니까 좀 쉽다는 생각은 들더라 하노이탑에서 가장 중요한 거는 n개 중에 n-1개를 먼저 보내려는 기둥말고 다른 기둥에 옮겼다가 남아 있던 1개를 옮긴 후에 보내려는 기둥에 옮기는 거다. 위의 말대로 그냥 코드를 작성했다. 재귀로 구현을 했고 n이 1일 때는 ..

<백준> 숨바꼭질 3(Gold 5)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/baekjoon%20%EB%AC%B8%EC%A0%9C%EC%A7%91/%EC%88%A8%EB%B0%94%EA%BC%AD%EC%A7%88%203 [백준] https://www.acmicpc.net/problem/13549 문제에 대한 접근만 딱 정해지니까 쉽게 해결했던 문제지만 풀고나서 돌아보니까 좀 아쉬웠던 문제였다. 문제를 처음 보고는 DP가 생각났었는데 그냥 반복문으로 하는 건 아닌 거 같았다. 시간에 대한 처리가 나뉘어야하기 때문이다. 그래서 BFS를 사용하기로 했다. 각 움직임에 대해 처리를 해서 모든 경우의 수를 집어넣으면서 돌렸다. 시간을 BFS 함수 내의 변수로 둘까 하다가 사용성을 생각..

반응형