[프로그래머스] 코딩 테스트 입문 - 두 개 뽑아서 더하기(Java)

수경·2022년 11월 6일
0

problem solving

목록 보기
56/174

프로그래머스 - 두 개 뽑아서 더하기

문제

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

제한사항
❗️numbers의 길이는 2 이상 100 이하입니다.
❗️numbers의 모든 수는 0 이상 100 이하입니다.

입출력 예시

numbersresult
[2,1,3,4,1][2,3,4,5,6,7]
[5,0,2,7][2,5,7,9,12]

풀이

  1. 입력받은 배열에 하나하나 접근
  2. 두 개의 요소를 더한 값 sum을 answer 배열에 저장
    2-1. 중복을 방지하기 위해 answer 배열에 sum이 없을 때만 저장
  3. 정렬

삽질

sum 이 answer 에 있는 지 확인하려고 여러가지 방법을 해봤다.

우선 자바에서 배열 안에 요소가 있는지 확인하려면

  1. for문 으로 하나하나 검색해서 보거나
  2. .contains() 로 보거나
  3. .binarySearch 로 찾거나
  4. 스트림 어쩌구로 찾거나

하는 방법이 있다. (or more)

나는 내장함수를 사용하고 싶어서 1번은 제외했고, 3번은 정렬된 배열에서 해야해서 매번 정렬을 해야한다는게 마음에 안들어서 제외했다. 4번은 몰라서 제외.

그래서 2번 contains 로 풀라고 했는데!!!!!!!!!!!!!!!!!!!! 처참히 실패

방법 두 가지를 해봤다.

  1. Arrays.asList(answer).contains(String.valueOf(sum))
    ➡️ 중복 요소 발생
    진심 왜 틀리는지 모르겠다. 모든 경우에 false 를 반환해서 모든 수를 저장했다....
    출력해서 확인도 해봤는데 대놓고 있는 요소를 쿨하게 없다고 하더라.... 대체 왜,,,?
  1. Arrays.toString(answer).contains(String.valueOf(sum))
    ➡️ 누락 발생
    중복은 안되는 걸 보니 잘 찾는 것 같은데, 배열을 문자열로 바꾸다보니 오류가 생기는 것 같다.
    예를 들어 {5, 12} ➡️ "[5, 12]" 로 저장을 하면서 숫자 121 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 / 참조타입 / 리터럴을 굉장히..... 따져서....... 그냥 슥샥 되는 것도 안 된다...((((내 기준))))

물론 자바에 적응하면 편하겠지만 아직까지는 파이썬이 훨씬 좋고 편하다.
문제를 읽어도 가장 먼저 떠오르는 풀이법은 거의 파이썬 문법이다.
자바는 ^^... 생각도 안난다고

내가 봤을 때 자바는 내장함수를 많이 알 수록 쓰기 좋을 것 같은데 아직 자바 초보인 나로써는 너무 어렵다,,,,, 일단 내장함수가 너무 많으니까 뭐가 있는 지, 뭐가 없는 지 알 수도 없다 🥺.... 막막.....

파이썬으로 풀고 싶다...🥹

profile
어쩌다보니 tmi뿐인 블로그😎

0개의 댓글