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/%ED%95%A9%EB%B6%84%ED%95%B4 [백준] https://www.acmicpc.net/problem/2225 손으로 해결한 문제였다. 이리저리 방황을 엄청 하다가 마지막에 딱 방향을 잡아서 해결했다. 문제는 아주 간단하다. 너무 간단해서 그냥 해야했다. 덧셈의 순서가 바뀐 경우는 다른 경우고 한 개의 수를 여러 번 쓸 수 있다는 거를 보니 중복 사용에 대한 고려가 필요하다고 느꼈다. 그냥 문제를 보면서 멍때리다가 '이번에는 손으로 경우의 수를 찾아보자!'라는 생각이 들어서 메모장 들고 적어보기 시작했다. 처음에는 예..

<백준> 신기한 소수(Gold 5)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/baekjoon%20%EB%AC%B8%EC%A0%9C%EC%A7%91/%EC%8B%A0%EA%B8%B0%ED%95%9C%20%EC%86%8C%EC%88%98 [백준] https://www.acmicpc.net/problem/2023 아주 쉽게 보고 접근했다가 메모리 초과 폭탄을 무지하게 많이 맞은 문제였다.(틀린 코드들은 깃허브에 다 남아있다.) 이 문제를 통해서 백트래킹을 할 때도 어떻게 가지치기를 해야할지 생각해보게 되었고 소수의 특성에 대해서도 좀 더 알게 되었다. 문제를 보고는 바로 2로 시작하는 숫자부터 해야겠다 싶었다. 4자리면 2000, 6자리면 200000 왜냐하면 1은 소수가 아니기 ..

<프로그래머스> 광물 캐기(Lv.2)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/%EA%B4%91%EB%AC%BC%20%EC%BA%90%EA%B8%B0 [프로그래머스] https://school.programmers.co.kr/learn/courses/30/lessons/172927 이전에 한번 풀려고 했다가 중도하차한 다음에 오늘 다시 도전했다. 그 때보다는 확실히 몸이 좋아서 그런지 문제에 집중이 잘 됐다. 물론 그렇다고 쉽게 풀린 건 아니었다. 가장 먼저 한 것은 입력으로 들어온 광물들을 Int타입으로 바꾸고 5개씩 나누는 작업을 했다. 그걸 위해서 key가 String이고 value가 Int인 해쉬맵을 만들어 map 안에서 사용했고 chunked 함수를 통해 5개씩 나눠주..

<백준> 로봇 청소기(Gold 5)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/baekjoon%20%EB%AC%B8%EC%A0%9C%EC%A7%91/%EB%A1%9C%EB%B4%87%20%EC%B2%AD%EC%86%8C%EA%B8%B0 [백준] https://www.acmicpc.net/problem/14503 정답 비율이 50퍼가 넘는 문제여서 그런지 생각보다 쉽게 풀었다. 문제에 조건이 많았지만 순서대로 진행하면 풀리더라 나는 계속 로봇 청소기가 쭉쭉 움직이면서 더 이상 청소 못할 때까지 작동하는 걸 보고 DFS가 생각나더라(이게 코딩하는 사람의 마음인가...?) 그래서 가장 먼저 DFS로 도전했고 어떻게 DFS를 짰었는지 생각이 안 나서 예전에 풀었었던 DFS문제들을 보며..

<프로그래머스> 거리두기 확인하기(Lv.2)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/%EA%B1%B0%EB%A6%AC%EB%91%90%EA%B8%B0%20%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0 [프로그래머스] https://school.programmers.co.kr/learn/courses/30/lessons/81302#fn1 며칠 전이었나... 이 문제를 볼 때는 '이거 못 풀겠는데?'라고 생각했었는데 오늘 다시 보니까 '생각보다 껌인데?'로 변경ㅋㅋ 생각보다 매우 숫자들이 작았고 고려해야하는 조건들이 적었다. 아마 맨해튼 거리가 3만 되었어도 고려해야할 것들이 두 배이상은 늘어났을 거 같다는 생각이 든다. 이문제는 먼저 방을 순회했다. 그리고 방 안의..

<백준> 톱니바퀴(Gold 5)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/baekjoon%20%EB%AC%B8%EC%A0%9C%EC%A7%91/%ED%86%B1%EB%8B%88%EB%B0%94%ED%80%B4 [백준] https://www.acmicpc.net/problem/14891 끝내 풀어냈노라...!! 진짜 이 악물고 고치고 합치고 쓰고 반례 뒤지면서 해결했다. 지금도 머릿속에서 톱니바퀴가 도는것만 같다... 이 문제는 주어진대로 구현하는 문제였어서 어떻게 해야하나 고민이 들었는데 그냥 그대로 코드를 적었다. 여기서 톱니바퀴가 특이했던 건 극성이 있어서 같은 극일 때는 옆의 톱니바퀴가 돌아가도 영향을 안 받고 다른 극일 때 영향을 받는다는 거였다. 처음에 톱니바퀴의..

<백준> 빗물(Gold 5)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/baekjoon%20%EB%AC%B8%EC%A0%9C%EC%A7%91/%EB%B9%97%EB%AC%BC [백준] https://www.acmicpc.net/problem/14719 쉽게 생각하고 접근했다가 잘 안 풀렸던 문제다. 가장 처음에는 양쪽 기둥을 기준으로 삼아서 문제를 해결하려고 했다. 그래서 처음 블록 높이를 기준으로 삼고 이보다 크거나 같은 블록이 등장하면 반복문을 돌면서 양쪽 높이에서 작은 거만큼 채우고 기준을 현재 블록으로 변경하는 식으로 짰다. 이렇게 짜니까 큰 높이에서 작은 높이를 체크하지 못하는 경우가 발생했다. 그래서 반대로 다시 반복문을 돌리는 식으로 땜빵을 하려고 했지만 양..

<백준> 동전 1(Gold 5)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/baekjoon%20%EB%AC%B8%EC%A0%9C%EC%A7%91/%EB%8F%99%EC%A0%84%201 [백준] https://www.acmicpc.net/problem/2293 익숙한 문제라고 생각하고 고민하는데도 안 풀리는 문제였다. 뭔가 어제 오늘 다 머리가 굳어있는 느낌이다. 어서 회복해야할텐데... 밥을 더 많이 먹어야겠다!! 이 문제는 보자마자 DP 문제겠거니 했다. 약간 거스름돈 문제가 생각나기도 했다. 그런데 접근이 안 되더라 1차원 배열을 써야할지, 2차원 배열을 써야할지 감이 잘 안 왔다. 내가 최대로 진행한 것은 각 동전을 리스트에 저장해놓은 것이다. 이렇게 해놔야지 각각 ..

<프로그래머스> 혼자 놀기의 달인(Lv.2)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/%ED%98%BC%EC%9E%90%20%EB%86%80%EA%B8%B0%EC%9D%98%20%EB%8B%AC%EC%9D%B8 [프로그래머스] https://school.programmers.co.kr/learn/courses/30/lessons/131130 주말 간의 피로를 잠으로 잘 풀고 눈 퉁퉁 부어 있는 상태에서 푸는 월요일 첫 문제는 문제 지문을 읽고 이해하는 게 제일 힘들었다. 안 그래도 머리가 안 돌아가는데 지문까지 기니까... 쉽지 않았다. 코드 작성 시간이랑 문제 읽는 시간이랑 삐까삐까 했던 거 같다. 이 문제는 간단하게 사이클 문제라고 볼 수 있었던 거 같다. 각각의 사이클을 이루는 ..

<프로그래머스> 미로 탈출(Lv.2)

[깃허브] https://github.com/heesoo-park/ForCodeKata/tree/main/%EB%AF%B8%EB%A1%9C%20%ED%83%88%EC%B6%9C [프로그래머스] https://school.programmers.co.kr/learn/courses/30/lessons/159993 생각보다 쉽게 풀어낸 문제였다. 오랜만에 프로그래머스 문제를 푸는데 이 문제는 보자마자 BFS에 경로를 두 번 나눠야겠다는 생각이 빡! 들었다. 그래서 바로 코드로 생각을 풀어내기 시작했다. 가장 먼저 두 개의 큐에 시작 지점 좌표와 레버 좌표를 넣었다. 두 개의 큐인 이유는 시작 지점에서 레버, 레버에서 출구로 가는 BFS를 따로 돌릴 것이기 때문이다. 레버를 당기지 못하면 출구로 빠르게 가도 나갈..

반응형