반응형
💡 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
‼️ numbers의 길이는 2 이상 100 이하입니다.
‼️ numbers의 모든 수는 0 이상 100 이하입니다.
🖥 내 풀이
using System;
using System.Linq;
using System.Collections.Generic;
public class Solution {
public int[] solution(int[] numbers) {
int[] answer = new int[] {};
List<int> tempList = new List<int>();
int num1 = 0;
int num2 = 0;
// 배열 안 서로 다른 수 더하기
for(int i = 0; i < numbers.Length; ++i) {
for(int j = i+1; j < numbers.Length; ++j) {
num1 = numbers[i];
num2 = numbers[j];
tempList.Add(num1 + num2);
}
}
// 중복값 제거
tempList = tempList.Distinct().ToList();
// 오름차순 나열
answer = tempList.ToArray();
Array.Sort(answer);
return answer;
}
}
- 처음에 배열로만 해결하려고 해서, 좀 골치 아팠다. 그리고 찾은 방법은 임시 리스트를 하나 생성해서, 리스트에 값을 추가한 다음 다시 배열로 바꾸는 것. (배열로 할 경우 배열의 길이가 정해져있지 않아서, 값을 추가하면 배열의 인덱스를 벗어났다는 에러가 계속 나왔다.)
- 중복값 제거의 경우에는 List에는 Distinct() 를 사용해서 중복값 제거를 할 수 있었는데, 이걸 쓰려면 using System.Linq; 를 추가해줘야 한다.
- 처음에 생각대로 코딩을 해서 num1과 num2를 선언하고 사용했는데, 굳이 변수 선언 안하고 바로 numbers[i]+numbers[j] 로 해줘도 될 것 같다.
🖥 다른 풀이 방법
using System;
using System.Collections.Generic;
public class Solution {
public int[] solution(int[] numbers) {
List<int> answerList = new List<int>();
for(int i = 0 ; i < numbers.Length -1 ; ++i){
for(int j = i+1 ; j < numbers.Length ; ++ j)
if(!answerList.Contains(numbers[i] + numbers[j]))
answerList.Add(numbers[i] + numbers[j]);
}
answerList.Sort();
return answerList.ToArray();
}
}
📚 참고했던 사이트
📚 C# 리스트
https://www.delftstack.com/ko/howto/csharp/how-to-add-values-to-array-in-csharp/
📚리스트 중복 제거
https://ponyozzang.tistory.com/384
🗒 출처: 프로그래머스
반응형
'코딩테스트 연습 > C#' 카테고리의 다른 글
[C#/알고리즘] 평균 구하기 (0) | 2021.06.02 |
---|---|
[C#/알고리즘] x만큼 간격이 있는 n개의 숫자 (0) | 2021.06.01 |
[C#/알고리즘] K번째 수 찾기 (0) | 2021.06.01 |
[C#/알고리즘] 나누어 떨어지는 숫자 배열 (0) | 2021.05.23 |
[C#/알고리즘] 서울에서 김서방 찾기 (0) | 2021.05.23 |