본문 바로가기
프로그래머스 코딩테스트 문제/Level 1

[프로그래머스] - 두 개 뽑아서 더하기(C#)

by jyppro 2023. 8. 27.

두 개 뽑아서 더하기

오늘은 월간 코드 챌린지 시즌1 출제문제 중 하나인 "두 개 뽑아서 더하기" 문제를 풀어보도록 하겠습니다. 현재 프로그래머스 레벨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]

 

입출력 예 설명

입출력 예 #1
2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.)
3 = 2 + 1 입니다.
4 = 1 + 3 입니다.
5 = 1 + 4 = 2 + 3 입니다.
6 = 2 + 4 입니다.
7 = 3 + 4 입니다.
따라서 [2,3,4,5,6,7] 을 return 해야 합니다.


입출력 예 #2
2 = 0 + 2 입니다.
5 = 5 + 0 입니다.
7 = 0 + 7 = 5 + 2 입니다.
9 = 2 + 7 입니다.
12 = 5 + 7 입니다.
따라서 [2,5,7,9,12] 를 return 해야 합니다.

 

시작 코드

using System;

public class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = new int[] {};
        return answer;
    }
}

 

나의 풀이

using System;
using System.Collections.Generic;

public class Solution
    {
        public int[] solution(int[] numbers)
        {
            List<int> answer = new List<int>();
            for (int i = 0; i < numbers.Length-1; i++)
            {
                for (int j = i+1; j < numbers.Length; j++)
                {
                    int temp = numbers[i] + numbers[j];
                    if (answer.Contains(temp) == false) { answer.Add(temp); }
                }
            }
            answer.Sort();
            return answer.ToArray();
        }
    }

 

코드 분석

int형 배열 numbers가 주어지고 코드가 시작됩니다. int형으로 리스트 answer를 만들고 이중for문을 돌립니다. i는 numbers의 길이에서 1을 뺀 수까지, j는 numbers의 길이까지, for문안에는 int형으로 temp를 만들고 numbers[i] 와 [j]를 더해 넣어줍니다. 그리고 만약 answer안에 temp가 포함되어 있지 않다면 answer에 temp를 더해줍니다. for문을 빠져나와 answer를 Sort를 통해 오름차순으로 정렬해주고, ToArray()를 통해 배열의 형태로 반환해줍니다.

 

풀이 설명

문제를 살펴보면, 주어진 배열에서 한개씩 각각 다른 수를 뽑아 만들 수 있는 모든 숫자의 조합을 만들고 오름차순 정렬하여 배열을 반환해야 합니다. 시작코드에서는 answer가 배열형태였지만, 리스트로 바꿔 사용한 것은 Contains와 Add를 사용해 더 편하게 검색과 추가를 실행하기 위해서입니다. 이중 for문으로 하나씩 서로 다른 숫자를 뽑고, temp는 두 수를 합친 것입니다. 코드가 매우 직관적이기 때문에 딱히 풀어서 설명할 내용은 없습니다. Contains는 answer리스트안에 temp를 포함하고 있는가에 대한 bool타입의 답을 반환하는 메서드입니다.

 

<NEXT>

오늘은 월간 코드 챌린지 시즌 1 출제문제인 "두 개 뽑아서 더하기" 문제를 풀어보았습니다. 다음에는 "가장 가까운 같은 글자" 문제를 다뤄보도록 하겠습니다. 감사합니다.