티스토리 뷰

조건을 하나 정해놓고 근사치를 뽑을 때까지 반복하면 되는 전형적인 Greedy 문제이다. 

체육복의 여벌이 있는 학생이 체육복을 도둑맞았을 때는 자신의 체육복을 써야 하므로, reserve 배열에서 빠져야 한다는 점을 제외하고는 크게 문제 될 게 없는 문제이다.

정석대로 풀면 이중 for문이 2번 들어가게 된다. 이, 삼중 for 문에 좀 많이 당해봤던터라...그 풀이가 좀 보기 싫어서 Set도 만들어보고, List도 만들어보고 했지만, 이 문제는 그냥 이게 정답이지 싶어서 포기했다...ㅎㅎ


package com.choonham;

class Solution {
	public int solution(int n, int[] lost, int[] reserve) {
		int answer = 0;
		int lostN = lost.length;
		int reserveN = reserve.length;
		int temp = n - lostN;
		
		for(int i = 0; i < lostN; i++) {
			for(int j = 0; j < reserveN; j++) {
				if(lost[i]==reserve[j]) {
					temp++;
					lost[i] = reserve[j] = -1;
					break;
				}
			}
		}
		
		for(int lostP : lost) {
			for(int j = 0; j < reserveN; j++) {
				if(reserve[j] == lostP + 1 || reserve[j] == lostP - 1) {
					temp++;
					reserve[j] = -1;
					break;
				}
			}
		}
	
		answer = temp;
		return answer;
	}

}

아니 뭐 별 어려운 문제도 아닌데.... 괜히 자존심 부리다가 힘만 뺐다..

반응형
Comments