Lv2(51)
-
[Programmers] Lv2. 수식 최대화 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨💻풀이 과정 자료구조 시간에 전위표기식(Prefix), 중위표기식(Infix), 후위표기식(Postfix)에 대해 배운 적이 있으나, 시간이 오래되어 기억이 잘 안 나더라구요. 그래서 다시 한 번 찾아봤습니다. 컴파일러가 연산자 우선순위에 따라 중위표기식을 후위표기식으로 변환한 후에, 계산을 진행한다고 하더라구요. 숲을 보지 못하고 나무만 볼 수 있는 컴퓨터 입장에선 수식을 왼쪽에서 오른쪽으로 차례대로 읽어가며 계산하는 게 편하죠. 그에 반해, 사람은 숲을 볼 수 있습니다. 눈으로 전체 수..
2023.06.08 -
[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