th42500의 TIL

[Java] Summer/Winter Coding(~2018) - 숫자 게임 (Lv 3) 본문

Algorithm/Programmers

[Java] Summer/Winter Coding(~2018) - 숫자 게임 (Lv 3)

th42500 2022. 12. 17. 12:44

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

 

프로그래머스

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

programmers.co.kr

 

 

✔ 입출력 예시

숫자 게임 입출력 예시

 

 

1️⃣ 첫번째 시도

❓ 풀이 방법

1️⃣ A와 B 배열을 모두 정렬

     👉 Int형 배열 타입을 내림차순으로 정렬하기 위해서는 Integer 타입으로 바꿔서 정렬해야하는 과정을 거쳐야 하므로 그냥 오름차순으로 정렬

2️⃣ A와 B를 2중 for문으로 순회하면서 A의 수보다 B가 더 클때에만 answer++ & B순회 break

 

✔ 소스코드

package lv3;

import java.util.Arrays;

public class Solution {  // 숫자 게임

	private int solution(int[] A, int[] B) {
		int answer = 0;
		Arrays.sort(A);
		Arrays.sort(B);
		
		for (int i = A.length-1; i >= 0; i--) {
			for (int j = B.length-1; j >= 0; j--) {
				if(A[i] < B[j]) {
					answer++;
					A[i] = -1;
					B[j] = -1;
					break;
				}
				
			}
		}
		return answer;	
	}
	
	public static void main(String[] args) {
		Solution main = new Solution();
		
		int[] A = {5, 1, 3, 7};
		int[] B = {2, 2, 6, 8};
		
		System.out.println(main.solution(A, B));
	}
}

 

❗ 실행 결과

👉 정확도 테스트는 모두 통과했으나, 효율성 테스트 통과 ❌

배열을 사용한 코드 실행 결과

이렇게 한번에 풀린다면 Lv3 일리가 없지...🤦‍♀️ 다시 도전🔥

 

 

2️⃣ 두번째 시도

❓ 풀이 방법

1️⃣ A와 B 배열을 모두 정렬

     👉 Int형 배열 타입을 내림차순으로 정렬하기 위해서는 Integer 타입으로 바꿔서 정렬해야하는 과정을 거쳐야 하므로 그냥 오름차순으로 정렬

2️⃣ A와 B를 2중 for문으로 순회하면서 A의 수보다 B가 더 클때에만 answer++ & B순회 break

   👉 단, B를 순회할 때 이전에 이미 게임을 위해 사용된 카드들은 살펴보지 않기 위해 idx변수부터 탐색

 

✔ 소스 코드

package lv3;

import java.util.Arrays;

public class Solution {  // 숫자 게임

	public int solution(int[] A, int[] B) {
		int answer = 0;
		Arrays.sort(A);
		Arrays.sort(B);
		
        int idx = B.length-1;
		for (int i = A.length-1; i >= 0; i--) {
			for (int j = idx; j >= 0; j--) {
				if(A[i] < B[j]) {
					answer++;
					A[i] = -1;
					B[j] = -1;
                    idx = j-1;
					break;
				}
			}
		}
		return answer;
	
	
	public static void main(String[] args) {
		Solution main = new Solution();
		
		int[] A = {5, 1, 3, 7};
		int[] B = {2, 2, 6, 8};
		
		System.out.println(main.solution(A, B));
	}

}

 

❗ 실행 결과

👉 정확성 테스트와 효율성 테스트 모두 통과 ⭕

1️⃣ 풀이과정 + idx변수 사용한 코드 실행 결과

Comments