호우동의 개발일지

Today :

article thumbnail
[Java/C++] 프로그래머스 Level 3 - 기둥과 보 설치
Algorithm/Programmers 2023. 8. 21. 18:23

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/60061 [2020 카카오 블라인드]에서 나왔던 문제. 너무 생각을 복잡하게 하고, 이상하게 해서 오래 걸렸다. 문해력이 부족한 탓일까? 문제 핵심 및 풀이 제한 사항 분석 제한사항을 보면 n은 최대 100이기 때문에, 100x100이 한계이다. 또한 build_frame이라는 구조물의 설치/삭제 커맨드는 최대 1000개까지 들어온다. 100x100x1000 = 10^7 으로 완전탐색을 해도 상관이 없다. 구조물을 어떻게 표현할 것인가? 이것도 나름 생각이 필요했다. 문제에서 기둥은 위로 설치하고, 보는 오른쪽으로 설치한다고 했다. 그래서 이를 설치가 시작된 곳의 좌표로, 구조물을 표현했다..

[Java/C++] 프로그래머스 Level 3 - 코딩테스트 연습
Algorithm/Programmers 2023. 8. 18. 18:54

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/118668?l [2022 KAKAO TECH INTERNSHIP]에 나왔던 문제 현재 프로그래머스에서 정답률은 20%로 Level 3 중에서도 낮은데, 실제 시험에서는 훨씬 더 낮지 않았을까? 다른 사람이 푼걸 보니, 꽤나 풀이법이 다양하게 나오는 문제였다. 그리고 최적화를 아주 깐깐하게 보는 문제였다. 문제 핵심 및 풀이 행동의 선택지 생각하기 어떻게 보면 문제를 그냥 정리하는 것일 수도 있는데, 난 여기서 큰 힌트를 얻었다. 점수는 알고력과 코딩력이라는 2가지의 유형이 존재하므로, 이를 각각 A, B라고 두겠다. 초기 점수가 (A, B)라고 생각해 보자. 최단 시간을 얻기 위해 할 수 ..

[Java/C++] 프로그래머스 Level 2 - 스킬트리
Algorithm/Programmers 2023. 8. 14. 01:23

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/49993? [Summer/Winter Coding 2018~]로 태그가 나와있던데 아무튼 그렇다. 직관적이고 단순하게 생각하면 된다. 복잡하게 생각하면 더 어려워지는 문제인 것 같다. 문제 핵심 및 풀이 선행 스킬 관계 만들기 특정 스킬을 익히기 전에 익혀야 할 스킬을 선행 스킬이라고 하겠다. 이건 단순하게 꼬리물기 구조로 만들어주면 된다."BCD"가 규칙일 때, B → C → D라는 뜻인데, 연속적으로 이루어져 있다.. 이걸 부모 자식 관계로 한번 바꿔서 생각해 보자. C를 배우기 위해선 B가 필요하다. 즉, parent [C] = B가 된다. D라는 스킬을 배우기 위해선 B, C 2개를..

[Java/C++] 프로그래머스 Level 2 - [3차] 방금그곡
Algorithm/Programmers 2023. 8. 6. 16:02

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/17683? 2018 카카오 블라인드 3차 코딩 테스트에서 나왔던 문제단순 구현 문제라고 생각되는데, 생각보다 구현해야 하는 함수 부분이 많아서 잘 정리하는 게 중요했다. 또한 예외 케이스가 많은 문제여서 테스트 케이스를 잘 짜는 것이 중요했다. 문제 핵심 및 풀이 멜로디와 일치하는 곡 찾기의 문제 멜로디(m)가 곡(musicInfo) 안에 있는지 확인하는 과정은, 일반적으로는 문자열 비교로 하면 된다. 하지만 입출력 예시 3번에서 볼 수 있듯이 #이 문제가 된다. 일반적인 문자열 비교로 찾을 때는, m = "ABC" , musicInfo = "ABC#" 일 때, 조건 일치로 판단한다. 그래..

article thumbnail
[Java/C++] 프로그래머스 Level 2 - 택배 배달과 수거하기
Algorithm/Programmers 2023. 7. 28. 13:19

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/150369? 2023년 카카오 블라인드에서 나온 따끈따끈한 최신 문제 이 문제를 실제 테스트로 봤으면 어땠을까? 문제 로직은 크게 어렵다고 생각 들진 않았지만 이상하게 푸는데 오래 걸렸다. 문제 핵심 및 풀이 제한사항 부분을 보면 집(n)의 개수가 최대 100,000개이고, cap은 50까지밖에 되지 않는다. deliveries와 pickups의 개수 또한 n과 같다. 해당 문제에서는 cap이 50밖에 되지 않는 것은 오히려 반복 횟수를 늘린다. 왜냐하면 50번밖에 담지 못하기 때문에 여러 번 왔다갔다 해야한다.. 그래서 완전탐색으로 해당 문제를 풀기에는 비효율적으로 보이고, 실제로 완전 ..

[Java/C++] 프로그래머스 Level 3 - 다단계 칫솔 판매
Algorithm/Programmers 2023. 7. 27. 13:43

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/77486 2021 Dev-Maching에서 나온 문제 카카오 기출문제만 풀다와서 그런진 모르겠는데, Level 3 치곤 쉽게 풀었다. 만약 카카오 코딩 테스트에서 나왔다면, Level 2 쯤 아니었을까? 문제 핵심 및 풀이 그림에서 보면 알 수 있듯이, 트리 구조가 형성되는 것을 알 수 있다. 그리고 해당 문제에서는 자신을 추천한 사람을 아는 것이 중요한데, parent [i] = k : i를 추천한 사람이 k이다. 이런 식으로 정의하도록 한다. 사람 이름 문자열을 매핑 여기서 생각해야 할 것은 트리의 각 노드들이 사람이름(문자열)이라는 점이다. 그래서 parent의 인덱스로 문자열을 사용..

article thumbnail
[Java/C++] 프로그래머스 Level 2 - 프렌즈4블록
Algorithm/Programmers 2023. 7. 14. 12:38

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/17679 카카오 블라인드 코딩테스트 2018년도 문제. 코딩테스트 리뷰를 보니까 난이도 상 문제였다. 문제 핵심 및 풀이 해당 문제는 제한사항에서 완전탐색으로 가능하다는 것을 인지해야 한다. 핵심적인 구현은 2가지가 있다. 1. 2x2에 연결되어 있는 다른 2x2 블록이 같이 터질 수 있도록 하는 것. 2. 블록이 터진 후 비어있는 공간에 위에 있는 블록들이 떨어지는 것. 2x2 블록들이 연쇄적으로 사라지게 하기 일단 2x2 조건을 만족하는 블록들을 찾아내는 것은 쉽다. 무조건 2x2 고정이기 때문에 현재 좌표를 (i, j)라고 한다면 ( i , j ) == ( i , j+1 ) == ( ..

article thumbnail
[Java/C++] 프로그래머스 Level 2 - 거리두기 확인하기
Algorithm/Programmers 2023. 7. 12. 14:22

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/81302?language=cpp 카카오 기출문제 중 Level 2 난이도, 그림만 많지 문제를 이해하기에는 어렵지 않다. X는 칸막이로 치고, 그냥 5x5 맵에 P와 P 사이에 맨해튼 거리를 계산하면 된다. 문제 핵심 및 풀이 키포인트는 5 x 5 맵이 5개 있다는 점. 탐색 범위가 작아 완전 탐색이든 뭐든 시간적인 제약은 없다. 또한 핵심 아이디어는 이 문제가 그래프 탐색을 할 수 있다는 것. 그중에서 편한 방법은 BFS인데, 왜냐하면 BFS를 통해 최단거리를 쉽게 구할 수 있기 때문이다. 이 문제를 왜 BFS로 풀 수 있을까? 맨해튼 거리를 계산하는 것이기 때문이다. 두 점 A와 B의 ..