https://programmers.co.kr/learn/courses/30/lessons/68644
//테스트코드
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class Quiz1_plusTwoElementsTest {
Quiz1_plusTwoElements q;
@BeforeEach
void setUp() {
q = new Quiz1_plusTwoElements();
}
@Test
void 길이2일때(){
assertArrayEquals(new int[]{3},q.solution(new int[]{1,2}));
}
@Test
void test2(){
assertArrayEquals(new int[]{2,3,4,5,6,7},q.solution(new int[]{2,1,3,4,1}));
}
@Test
void test3(){
assertArrayEquals(new int[]{2,5,7,9,12},q.solution(new int[]{5,0,2,7}));
}
}
// 길이가 2일때 위험하니까 한번 확인해주자
// 프로덕션코드
import java.util.*;
public class Quiz1_plusTwoElements {
public int[] solution(int[] numbers) {
Set<Integer> setOfSum = new HashSet<>();
for (int i = 0; i < numbers.length - 1; i++) {
for (int j = i + 1; j < numbers.length; j++) {
setOfSum.add(numbers[i] + numbers[j]);
}
}
int[] answer = new int[setOfSum.size()];
int i = 0;
Iterator<Integer> iterator = setOfSum.iterator();
while (iterator.hasNext()) {
answer[i] = iterator.next();
i++;
}
Arrays.sort(answer);
return answer;
}
}
//성공! 중복x 집합개념이니까 Set 사용했다. Set->Array로 자연스럽게 넘어갈 수 있는 방법이 없을까?
// Object[] toArray() 있는데 객체 배열로 반환한다. Integer객체로 바꿀 수 있을까?
// Integer[] arr = set.toArray(new Integer[0])
// Set 객체의 toArray() 메소드를 이용하면 된다.
// 이때 배열의 크기를 0으로 지정하면 자동으로 배열의 크기가 지정된다.
toArray를 Object[]타입으로 리턴하는 것이 아닌 String[] 으로 리턴하고 싶다면,
set.toArray(new String[0]) 으로 작성해주면 된다.
https://stackoverflow.com/questions/5061640/make-arraylist-toarray-return-more-specific-types
int[] 랑 Integer[] 가 다르구나??
뭐지...? int는 primitive type이고 Integer는 Integer객체인건가...?
Yes!
설명이 깔끔한 블로그 글을 첨부한다.
https://includestdio.tistory.com/1
//프로덕션코드
import java.util.*;
public class Quiz1_plusTwoElements {
public int[] solution(int[] numbers) {
Set<Integer> setOfSum = new HashSet<>();
for (int i = 0; i < numbers.length - 1; i++) {
for (int j = i + 1; j < numbers.length; j++) {
setOfSum.add(numbers[i] + numbers[j]);
}
}
Integer[] IntegerAnswer = setOfSum.toArray(new Integer[0]);
int[] answer = new int[IntegerAnswer.length];
for (int i = 0; i < IntegerAnswer.length; i++) {
answer[i] = IntegerAnswer[i];
}
Arrays.sort(answer);
return answer;
}
}
// 성공! 하지만 더 코드가 깔끔해질 수 있을것 같은데... 자바의 정석 기초편 쭉 듣고 다시 와보자.
// 1달에 한번씩 이제까지 했던 것들을 쭉 리뷰해보면서 보완하는 시간을 가져야겠다.
// 열심히 했다면 부족한 부분이 많이 보일 것이고 그게 아니라면 반성해야지...
// 리팩토링하고 마무리하자.
//프로덕션코드
import java.util.*;
public class Quiz1_plusTwoElements {
public int[] solution(int[] numbers) {
Set<Integer> setOfSum = new HashSet<>();
getSetOfSum(numbers, setOfSum);
Integer[] IntegerAnswer = setOfSum.toArray(new Integer[0]);
int[] answer = new int[IntegerAnswer.length];
getIntTypeAnswer(IntegerAnswer, answer);
Arrays.sort(answer);
return answer;
}
private void getIntTypeAnswer(Integer[] IntegerAnswer, int[] answer) {
for (int i = 0; i < IntegerAnswer.length; i++) {
answer[i] = IntegerAnswer[i].intValue(); //.intValue() 없어도 자동으로 바꿔주긴 하네.
}
}
private void getSetOfSum(int[] numbers, Set<Integer> setOfSum) {
for (int i = 0; i < numbers.length - 1; i++) {
for (int j = i + 1; j < numbers.length; j++) {
setOfSum.add(numbers[i] + numbers[j]);
}
}
}
}
// 성공!
'코딩테스트연습 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 - JAVA] 나누어 떨어지는 숫자 배열 (0) | 2021.12.05 |
---|---|
[프로그래머스 - JAVA] 실패율 (0) | 2021.12.03 |
[프로그래머스 - JAVA] 3진법 뒤집기 (0) | 2021.12.01 |
[프로그래머스 - JAVA] 폰켓몬 (0) | 2021.11.29 |
[프로그래머스 - JAVA] 체육복 (0) | 2021.11.28 |