정수 배열 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] |
sum 이 answer 에 있는 지 확인하려고 여러가지 방법을 해봤다.
우선 자바에서 배열 안에 요소가 있는지 확인하려면
for문
으로 하나하나 검색해서 보거나.contains()
로 보거나.binarySearch
로 찾거나하는 방법이 있다. (or more)
나는 내장함수를 사용하고 싶어서 1번은 제외했고, 3번은 정렬된 배열에서 해야해서 매번 정렬을 해야한다는게 마음에 안들어서 제외했다. 4번은 몰라서 제외.
그래서 2번 contains
로 풀라고 했는데!!!!!!!!!!!!!!!!!!!! 처참히 실패
방법 두 가지를 해봤다.
Arrays.asList(answer).contains(String.valueOf(sum))
false
를 반환해서 모든 수를 저장했다....Arrays.toString(answer).contains(String.valueOf(sum))
{5, 12}
➡️ "[5, 12]"
로 저장을 하면서 숫자 12
를 1
2
로 인식하는 것이다. 그래서 현재 배열에 숫자 2
는 없음에도 2
가 있다고 반환하는 것이다.........................(절망)이것 저것 해보다가 결국 다 포기하고 원초적이고 가장 정확한... 방법... for문
돌리기를 선택했다............. 하아ㅏㅏㅏㅏ 이러고 싶지 않았어 나도
다른 사람들 풀이를 보니 List<>
뭐 이런걸 많이 쓴 것 같은데 나는 그게 뭔지 아직 몰라서,,,,,, 일단 아는 방법으로 풀고 싶어서 안했다.... 공부하고 풀면 되지만,,, 일단 스터디 분들이 어떻게 푸셨나 보고나서 공부를 하던가 해야겠다..........
자바.... 절망적......
class Solution {
public int[] solution(int[] numbers) {
int[] answer = {};
for (int i = 0; i < numbers.length - 1; i++) {
for (int j = i + 1; j < numbers.length; j++) {
int sum = numbers[i] + numbers[j];
boolean isContain = false;
for (int a : answer) {
if (a == sum) {
isContain = true;
break;
}
}
if (!isContain) {
answer = Arrays.copyOf(answer, answer.length + 1);
answer[answer.length - 1] = sum;
}
}
}
Arrays.sort(answer);
return answer;
}
}
자바로 코테문제를 풀어본건 처음인데 정말 절망 그 자체......
분명 문제는 쉽고 어떻게 해야할지도 바로바로 알겠는데 이런 문법 요소 때문에 자꾸 막힌다.
아무래도 비교적 제한이 덜한 파이썬으로 코테를 풀었어서 그런지 ㅠㅠ.... 자바............... 진심 적응하기 어렵다.......
그리고 생각보다 불친절함
다른 글에도 썼지만, 자바는 boolean / 참조타입 / 리터럴을 굉장히..... 따져서....... 그냥 슥샥 되는 것도 안 된다...((((내 기준))))
물론 자바에 적응하면 편하겠지만 아직까지는 파이썬이 훨씬 좋고 편하다.
문제를 읽어도 가장 먼저 떠오르는 풀이법은 거의 파이썬 문법이다.
자바는 ^^... 생각도 안난다고
내가 봤을 때 자바는 내장함수를 많이 알 수록 쓰기 좋을 것 같은데 아직 자바 초보인 나로써는 너무 어렵다,,,,, 일단 내장함수가 너무 많으니까 뭐가 있는 지, 뭐가 없는 지 알 수도 없다 🥺.... 막막.....
파이썬으로 풀고 싶다...🥹