EunJng

[PRO] 숫자 게임 | Java | Python 본문

PROBLEM/PROGRAMMERS

[PRO] 숫자 게임 | Java | Python

Eunjng 2023. 6. 14. 10:14

문제

프로그래머스 코딩테스트 연습 > Summer/Winter Coding(~2018) 숫자 게임 | Lv.3

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

 

프로그래머스

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

programmers.co.kr

 

 

 

풀이 과정

자바 풀이

import java.util.*;

class Solution {
    public int solution(int[] A, int[] B) {
        int answer = 0;
        Arrays.sort(A);
        Arrays.sort(B);
        int idx = 0;
        
        for(int b : B) {
            if(b > A[idx]) {
                answer++;
                idx++;
            }
        }
        
        return answer;
    }
}
  • A에서 비교할 값의 인덱스를 idx라는 변수를 통해 저장
  • 배열 두 개를 정렬한 뒤, B를 순회하면서 A의 해당 idx값보다 크다면 answer과 idx를 1씩 증가(A의 다음 원소를 비교하기 위해)

 

파이썬 풀이

def solution(A, B):
    answer = 0
    A.sort()
    B.sort()
    
    idx = 0
    for b in B:
        if b > A[idx]:
            answer += 1
            idx += 1
    
    return answer
  • 처음에 A를 내림차순으로 정렬한 뒤 for문을 사용하고, used라는 배열을 새로 만들어 사용하지 않은 B의 원소에 대해서 비교하도록 하였다.
    이중for문이라 걱정했는데 역시나 시간초과 뜸(해당 풀이는 아래에)
    따라서 idx라는 변수를 별도로 저장하여 for문 사용을 줄이고자 하였다. 
  • A에서 비교할 값의 인덱스를 idx라는 변수를 통해 저장
  • 배열 두 개를 정렬한 뒤, B를 순회하면서 A의 해당 idx값보다 크다면 answer과 idx를 1씩 증가(A의 다음 원소를 비교하기 위해)


처음 코드

# 시간초과된 풀이
def solution(A, B):
    answer = 0
    A.sort(reverse=True)
    B.sort()
    used = [0] * len(B)
    for a in A:
        for i in range(len(B)):
            if not used[i] and a < B[i]:
                used[i] = 1
                answer += 1
                break
    return answer

 

 

자바 풀이 정확성 및 효율성

파이썬 풀이 정확성 및 효율성