프로그래머스 _ 두 개 뽑아서 더하기
programmers.co.kr/learn/courses/30/lessons/68644
가장 먼저 든 생각 → 짧고 쉬워 보인다!
다음으로 든 생각 → numbers[i]와 numbers[i+1]을 더해주면 끝 아닌가?
대충 이런 식으로? 하지만 코드 실행도 전에 문제점이 보인다.
i는 numbers의 길이만큼 for문을 돌텐데, i가 len(numbers) 번째라면?
numbers[i+1]은 존재하지 않는다!!! out of range 에러가 뜰 것이 불 보듯 뻔하다.
따라서 이렇게!
이러면 numbers의 원소가 5개일 때 numbers[4]에서 멈추는디요?
맞다! numbers[3] + numbers[4]까지만 필요하고 numbers[4]+numbers[5]는 필요가 없으니까!(존재하지도 않고)
끄응... 출력된 걸 보니 7과 12가 존재하지 않는다.
이 녀석들은 5+2 , 5+7이 이뤄져야 하는데...?
아하! 우리가 적은 코드는 i 번째 숫자와 그다음인 i+1번째 숫자만을 더할 뿐이다!!
두 수를 뽑아 더해서 만들 수 있는 모든 수를 구해야 하므로...
[i]와 [i+1], [i+2], [i+3], .... [len(numbers)] 모두를 더해야만 한다!!!
↑ i번 째 뒤도 1,2,3... len(numbers)만큼 증가하네? → for문을 하나 더 쓰자!
첫 번째 for문을 통해 numbers의 i번째 숫자를 구하고,
두 번째 for문을 통해 i+1번째, i+2번째, ... len(numbers) 번째 숫자를 구해 둘을 더했다!
또한 더해서 나올 수 있는 숫자들의 중복을 없애어야 하므로 set()을 써준 모습!
띠용... 또 출력된 값을 보아하니...
이상한 녀석이 껴있다! 바로 0과 14! 이 둘은 각각 0+0, 7+7을 해야 나오는 숫자.
아하..! numbers[i] + numbers[j+1]를 해줬으니 i=j+1일 때는 같은 수를 더하는 게 돼버린다!
하지만 우리가 원하는 건 서로 다른 두 숫자를 더해 나올 수 있는 수를 구하는 것.
쨔잔. 따라서 if문을 통해 i와 j+1이 같으면 continue를 시켜줬다!
또한 return값은 list형태여야 하니 set(result)를 다시 list에 담아준 모습.
띠요요요요용? 우째 이런 일이...!
테스트 4,5번이 대체 뭐길래...?
으악! 첫 10글자를 읽자마자 번뜩 든 생각!
문제를 잘 읽어보면 → 모든 수를 배열에 오름차순으로 담아!
오름차순은 sorted()만 써주면 간단!
오늘은 4점 획득!
오늘도 다른 사람의 풀이.
으악!
for문을 2개 돌리는 건 비슷하다만... 두 번째 for문의 범위를 저렇게 지정해주면 될 일이었다!
어차피 i번째 수와 i+1~len(numbers) 번째의 수를 더해주는 거니까!!!
'source-code > Algorithm' 카테고리의 다른 글
프로그래머스 _ 크레인 인형뽑기 게임 (0) | 2021.02.20 |
---|---|
프로그래머스 _ 내적 (0) | 2021.02.19 |
프로그래머스 _ 실패율 (0) | 2021.02.17 |
프로그래머스 _ 이상한 문자 만들기 (0) | 2021.02.16 |
프로그래머스 _ 하샤드 수 (0) | 2021.02.15 |