
나는 왜 틀렸는가?
내가 처음 작성한 코드는 다음과 같다.
def solution(people, limit):
print(people)
people = sorted(people, reverse = True)
answer = 0
save = []
visit = []
for i in range(len(people)):
if people[i] not in save:
if len(save) == len(people):
break
rest = limit - people[i]
x = [i]
y = [people[i]]
for j in range(i+1,len(people)):
if rest >= people[j] and j not in save:
x = [i,j]
y = [[people[i],people[j]]]
break
save.extend(x)
visit.extend(y)
print(visit,save)
return len(visit)
한 눈에 봐도 불필요한 변수가 너무 많고, 복잡한 것 같다 ..
직접 만든 테스트케이스는 대부분 통과하였으나, 실제 제출만해보면 대참사가 일어났다.

테케를 10개정도 만들었는데, 다 통과해서 이 정도면 출제 오류인가 .. ? 하는 생각이 잠시 들었지만, 역시나 오류는 항상 내 실력이 오류였다.
[10, 10, 10, 10, 10, 10, 10], 30 을 입력으로 넣었을때, 출력은 4이 나와야하는데, 내 코드는 7이 나왔다.
저렇게 다 틀린걸보면, 아예 로직 자체가 잘못됐을 수도 있는 것 같은데 로직을 구체적으로 짜고 이를 한 문장씩 코딩해보자. 또한 코드를 좀 더 간결하게 짤 필요가 있다!
정답 풀이
def solution(people, limit) :
answer = 0
people.sort()
a = 0
b = len(people) - 1
while a < b :
if people[b] + people[a] <= limit :
a += 1
answer += 1
b -= 1
return len(people) - answer
# 50 50 70 80 -> answer = 0
# 50 50 70 -> answer = 0
# 50 50 -> asnwer = 1
# 최종 answer = 1, 따라서 len(people) - answer = 4 - 1 = 3
너무 간결한 풀이과정 ..
2명씩 한 보트에 탑승하기 때문에, 정렬된 people list에서 앞 뒤로 한명씩 빼면서 풀면 됨 ..
while a < b를 통해 a와 b가 역전되면 stop하는 방식도 잘 기억해두자!
'Coding > 알고리즘 오답' 카테고리의 다른 글
프로그래머스 level2 _ 짝지어 제거하기 [Python] (0) | 2023.01.11 |
---|---|
프로그래머스 level2 _ 숫자의 표현 [Python] (0) | 2023.01.10 |
프로그래머스 level2 _ 올바른 괄호 [Python] (0) | 2022.12.31 |
프로그래머스 level2 _ 최솟값 만들기 [Python] (1) | 2022.12.31 |
프로그래머스 level2 _ JadenCase 문자열 만들기 [Python] (0) | 2022.12.30 |
댓글