본문 바로가기
코딩테스트 연습

최솟값 만들기

by 신재은👩🏼‍💻 2024. 5. 12.

https://school.programmers.co.kr/learn/courses/30/lessons/12941

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.*;

class Solution
{
    public int solution(int []A, int []B)
    {
        List<Integer> list1 = new ArrayList<Integer>();
        List<Integer> list2 = new ArrayList<Integer>();
        for(int e : A) {
            list1.add(e);
        }
        for(int e : B) {
            list2.add(e);
        }
        int sum = 0;
        
        while(!list2.isEmpty()) {
            int max = Collections.max(list1);
            int min = Collections.min(list2);
            sum = max * min;
            list1.remove(String.valueOf(max));
            list2.remove(String.valueOf(min));
        }
        return sum;
    }
}

 

이렇게 짰는데... 실행 시간 초과로 제출이 안 됐다.

아니 그냥 코드 실행 자체가 안 됐다.

 

실행 시간이 10.0초를 초과하여 실행이 중단되었습니다. 실행 시간이 더 짧은 다른 방법을 찾아보세요.

 

나는 이런 상황이면 바로 GPT한테 간다.

문제도 이해했고, 코드도 다 짜 봤는데 실행 시간 초과라면 내가 바로 해결하기 어렵다.

그렇게 피드백 받은 코드가 정말 충격적이었다.

import java.util.*;

class Solution {
    public int solution(int[] A, int[] B) {
        // 배열 A는 오름차순으로 정렬
        Arrays.sort(A);
        // 배열 B는 내림차순으로 정렬
        Arrays.sort(B);
        int sum = 0;
        int n = A.length;
        for (int i = 0; i < n; i++) {
            sum += A[i] * B[n - 1 - i];  // A의 i번째 요소와 B의 역순 i번째 요소를 곱함
        }
        return sum;
    }
}

 

와.

정말 대단히 쉽고 단순하며 논리적인 걸로 승부를 다 봤다.

소팅도 리버스로 안 한다.

그런 걸 왜 하나?

인덱스 조작하면 되는데.

다른 사람의 풀이 상위에도 위 같은 풀이법이 없었다.

누군가가 분명 했겠지만, 워낙 오래된 문제라서 상단에 없는 거겠지만, 별로 좋아 보이지 않는 코드가 상위에 있는 것

그리고 아래로 내려봐도 위 같은 접근법이 안 보이는 것 등이 많은 생각을 하게 한다.

 

GPT는... 혁명이다.

하위층의 수준을 끌어올리기에는 이것만 한 게 없다.

세상 어디에도 돈 3만 원으로 이런 피드백을 해 줄 곳은 없다.

'코딩테스트 연습' 카테고리의 다른 글

다음 큰 숫자  (2) 2024.05.12
이진 변환 반복하기  (0) 2024.05.12
소수 찾기  (0) 2024.05.12
K번째수  (0) 2024.05.10
[1차] 비밀지도  (0) 2024.05.10