본문 바로가기
C#/프로그래머스

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

by TODAYCODE 2021. 7. 28.
반응형

프로그래머스 코딩테스트 Level 1 - 두 개 뽑아서 더하기

 

코딩테스트 연습 - 두 개 뽑아서 더하기

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

programmers.co.kr

문제의 핵심

1. 리스트와 배열을 사용하고 정렬하기

2. if문을 사용해서 중복을 검사하기

 


 

정수로 이루어진 number 배열이 주어지면

서로 다른 인덱스의 정수를 더한다.

이렇게 더해서 생성 할 수 있는 값을 모두 모아서 오름차순으로 정렬하는 문제이다.

 

 

이중 for문을 돌리면 간단하게 해결 할 수 있다.

다만,

문제에서 중복인덱스끼리 더할 수 없다고 했으므로, 주의할 점이 있다.

첫번째 for문의 i 값은 0부터 Length - 1 까지 돌려준다.

두번째 for문의 j 값은 i+1부터 Length까지 돌려준다.

이렇게 설정하면 i번째 숫자와 i+1번째 숫자의 합을 구할 수 있고,

Length의 범위도 벗어나지 않으며, 중복 인덱스도 발생하지 않는다.

이렇게 모든 인덱스끼리의 합을 계산해서 리스트에 저장해주면 된다.

 

중복된 결과값은 저장할 필요가 없으므로,

Contains() 메소드를 사용해서 중복이 아닌 경우만 리스트에 추가해준다.

 

 

이렇게 리스트를 완성한 다음에

Sort() 메소드를 사용해서 리스트를 정렬해준다.

(문제에서 오름차순으로 정렬하라고 한 것을 못봐가지고 틀렸었다.. 문제를 잘 읽자...)

 

 

정답 코드

using System;
using System.Collections.Generic;

public class Solution
    {
        public int[] solution(int[] numbers)
        {
        	// 정답을 담아둘 리스트를 하나 생성한다.
            List<int> answer = new List<int>();
            
            // 이중 for문을 돌린다. 첫번째는 numbers.Length-1까지다.
            for (int i = 0; i < numbers.Length-1; i++)
            {
            	// 두번째 for문은 i+1 번 부터 시작한다.
                for (int j = i+1; j < numbers.Length; j++)
                {
                	// i번째와 j번째를 더해서 temp에 담는다.
                    int temp = numbers[i] + numbers[j];
                    // 리스트에 temp와 동일한 값이 있는지 검사
                    if (answer.Contains(temp) == false)
                    {
                    	// 동일한 값이 없으면 넣어준다 
                        answer.Add(temp);
                    }
                }
            }
           	// 리스트를 정렬해준다.
            answer.Sort();
            // 배열로 뽑아줌.
            return answer.ToArray();
        }
    }
반응형

댓글