문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42885#
1. 문제 접근방법
중량을 기준으로 오름차순 정렬 후, 투포인터로 탐색범위를 좁혀 답을 도출합니다.
2. 발생케이스
1) 최소중량 + 최대중량 <= 제한중량
: 구명보트에 2명을 태워 보낼 수 있기에 둘을 태워 보냅니다.
이후, 최소값 인덱스를 조절해야 합니다.
2) 최소중량 + 최대중량 > 제한중량
: 2명이 탈 수없기에, 최대중량(1명)만 태워 보냅니다.
3. 구현
function solution(people, limit) {
let answer = 0;
let startIdx = 0;
let endIdx = people.length-1;
people.sort((a,b) => a-b);
for(let i = endIdx; i >= startIdx; i--) {
if(people[startIdx] + people[i] <= limit) {
startIdx++;
}
answer += 1;
}
return answer;
}
코드로만 보면, 직관적으로 이해하기 어려울 수 있습니다.
그럴경우엔 저는, 코드를 따라서 직접 동작 흐름을 따라가 보는 편입니다.
이후, 간결하게 로직 시각화까지 해보면
확실히 이해가 되더라구요.
지금은 이 과정이 번거로울 수 있지만,
다음에 비슷한 로직을 보면, 직접 동작 흐름을 따라가 보지 않더라도, 빠르게 이해하고 있는 절 볼 수 있더라고요.
조금 시간이 걸렸던 코드는 이렇게 정리하고 공부하고 있습니다 : )
내용 중, 잘못된 부분이 있다면 편하게 말씀해주세요
감사합니다.
'CS > 로직' 카테고리의 다른 글
[ 2차원 배열 ] 2차원 배열을 공부하고, 문제 풀어보기 (+ 행과 열 바꾸기) (0) | 2021.07.06 |
---|---|
[ switch문 ] 다양한 케이스를 처리할 수 있는, switch문 정리 (0) | 2021.07.05 |
댓글