전체 글(275)
-
[Programmers] Lv2. 롤케이크 자르기 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 철수와 동생의 각 토핑 종류 수만 같으면 되기에, 중복이 되지 않는 자료구조가 필요합니다. 데이터의 개수가 최대 1,000,000개이기 때문에 검색, 삽입, 삭제에 좋은 해시(Hash)를 쓰기로 했습니다. Key-value 구조인 unordered_map과 Key 구조인 unordered_set을 사용하였습니다. 전략은 다음과 같습니다. 저는 처음에 철수에겐 한 조각도 없고, 동생이 모든 케이크 조각을 가지고 있는 상태로 출발합니다. topping을 순회하며, 각 토핑의 개수 ..
2023.06.08 -
[Programmers] Lv2. 리코쳇 로봇 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 처음에는 DFS로 접근을 했다가 결국 못 풀었습니다. 아마 그대로 진행했어도 가지 치기를 못해서 시간 초과가 났을 것 같네요. 그래서 BFS로 전략을 바꿔 풀다 보니 알게 된 사실인데, 제가 설계를 조금 잘못했었더라구요. 장애물이나 맨 끝에 부딪힌 빈 공간만 방문 표시를 했었어야 했는데, 지나간 경로를 다 방문 표시 해버렸습니다..ㅎㅎㅎ 아무튼, BFS를 통한 전략은 다음과 같습니다. 로봇의 처음 위치 'R', 목표 지점 'G'의 좌표를 알아낸 후 저장해둔다. R의 좌표를 방문..
2023.06.07 -
[Programmers] Lv2. 광물 캐기 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 저는 백트래킹(Backtracking)을 이용하여 풀었습니다. 구현 과정은 다음과 같습니다. 광물을 5개씩 차례대로 분리하고, 남은 광물 수가 5개가 안 될 경우에는 남은 광물을 모조리 담아 2차원 배열 생성 곡괭이 배열과 분리한 2차원 광물 배열을 순회하면서, 곡괭이를 다 썼거나 광물이 없을 때까지 피로도 합산 진행 합산한 피로도가 이전에 계산한 최솟값 피로도보다 작다면 변경 이후 한 단계 뒤로 가서 다음 탐색은 없는지 진행 문제를 풀고 나서 다른 분들 풀이는 어떨까 하고 찾..
2023.06.06 -
[Programmers] Lv2. 마법의 엘리베이터 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 내려가는 게 유리한 숫자 : 0, 1, 2, 3, 4 올라가는 게 유리한 숫자 : 6, 7, 8, 9 애매한 숫자 : 5 숫자 5가 나왔을 때에는 바로 앞 숫자를 살펴보는 게 필요합니다. 바로 앞 숫자가 5 이상이라면 올라가는 게 유리하고, 5 미만이라면 내려가는 게 유리합니다. # [예시1] 35 - 올라갈 경우 : 35 + 5 -> 40 - 40 => 9번 사용 - 내려갈 경우 : 35 - 5 -> 30 - 30 => 8번 사용 3은 5보다 작으므로 내려가는 게 유리합니다...
2023.06.05 -
[Programmers] Lv2. 뒤에 있는 큰 수 찾기 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 입력 데이터의 크기가 백만 개라 \( O(N^2) \)으로는 풀 수 없습니다. 어떤 자료구조를 쓸까 고민을 많이 했습니다. 문제에서 볼 수 있는 특징들은 다음과 같습니다. 입력 데이터를 차례대로 순회 시작 현재 숫자가 뒤의 숫자보다 작다면, 뒤의 숫자는 뒷 큰수이므로 현재 숫자를 해당 뒷 큰수로 교체 현재 숫자가 뒤의 숫자보다 크다면, 뒷 큰수가 있을 수도 없을 수도 있는 숫자이므로 따로 관리 따로 관리되는 이 숫자들은 훗날 뒷 큰수를 만났을 때, 해당 뒷 큰수보다 작은 숫자들..
2023.06.04 -
[Programmers] Lv2. 모음 사전 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 백트래킹(Backtracking)을 이용해 사전 순서대로 단어를 조합하는 방식으로 풀었습니다. 1)알파벳을 하나씩 붙이고 떼는 과정에서 인덱스 번호를 증가시키고, 2)원하는 단어를 찾으면 탐색을 중지하도록 구현하였습니다. 재귀(Recursion)와 백트래킹(Backtracking) 개념이 처음에는 익숙하지 않아, 코드로 구현하기 어려웠는데 점점 연습하다 보니 익숙해 지는 것 같습니다. ✏️소스 코드 및 결과 #include #include using namespace std; ..
2023.06.04