본문 바로가기

Python/[백준] 문제 풀기

[1단계] 두 개 뽑아서 더하기

문제 설명

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

제한 사항

  •  numbers의 길이는 2 이상 100 이하입니다.

  •  numbers의 모든 수는 0 이상 100 이하입니다.

입출력 예

numbers result
[2,1,3,4,1] [2,3,4,5,6,7]
[5,0,2,7] [2,5,7,9,12]

사용 메서드 및 속성

length Array 인스턴스의 속성으로 배열의 길이를 반환합니다.
push() 배열의 끝에 하나 이상의 요소를 추가하고, 배열의 새로운 길이를 반환합니다.
sort() 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다.
from() 유사 배열 객체나 반복 가능한 객체(iterable object)를 얕게 복사해 새로운 Array 객체를 만듭니다.

어떻게 풀어요?

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

 

입력되는 값은 정수 배열 numbers이고 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 오름차순으로 담아서 반환해야 하는 문제입니다.

 

서로 다른 인덱스에 있는 두 수를 찾아서 더해야 하기 때문에 for문을 2번 돌아야겠네요. 하지만 그냥 for문만 2번 돌았다가는 중복되는 수가 나올 수 있겠죠? 그렇다면 그 중복값을 어떻게 없애야 할까요?

for문을 더 사용해서 중복값을 제거할 수 있겠지만 그건 너무 시간낭비 잖아요.

 

그래서 이 문제는 중복값을 허용하지 않는 Set을 사용해서 배열에 담긴 중복값을 전부 제거해주고, sort() 메소드를 사용해서 오름차순으로 정렬한 뒤, Array.from() 메소드를 사용해서 Set을 배열로 다시 바꿔줬답니다.

 

트리스티의 답

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function solution(numbers) {
    var answer = [];
    var box = [];
    
    for (var i = 0; i < numbers.length; i++) {
        for (var j = i+1; j < numbers.length; j++) {
            box.push(numbers[i] + numbers[j]);
        }
    }
    
    var sortBox = Array.from(new Set(box)).sort(function(a,b) { return a - b; });
    answer = sortBox;
    
    return answer;
}
cs

 

※ 잘못된 정보가 있거나 수정사항이 있다면 댓글로 남겨주세요!

'Python > [백준] 문제 풀기' 카테고리의 다른 글

[10869] 사칙연산  (0) 2021.03.14
[1914] 하노이 탑  (0) 2021.03.11
[7576] 토마토  (0) 2021.03.11
[1003] 피보나치 함수  (0) 2021.03.11
[11053] 가장 긴 증가하는 부분 수열  (0) 2021.03.11