[프로그래머스] 코딩 테스트 연습 - 체육복(Java)

수경·2022년 11월 27일
1

problem solving

목록 보기
63/174

프로그래머스 - 체육복

풀이

✔️ 여분의 체육복을 갖고 있는 학생이 체육복을 잃어버린 경우
➡️ lost 배열과 reserve 배열에 동시에 있는 경우
➡️ 체육복을 잃어버렸지만 자기 것은 있고, 남에겐 빌려줄 수 없음
➡️ lost 배열과 reserve 배열에서 삭제!

  1. 반환 = 체육복을 입을 수 있는 학생 수 (count)
    = 전체 학생 수 - 체육복을 잃어버린 학생 수

  2. lost 배열과 reserve 배열의 요소를 비교해서, 같은 값이 있으면 해당 요소의 값을 -1로 바꿔주고, count += 1
    ➡️ 요소 삭제 대신 의미없는 값을 넣어줌

  3. lost 배열과 reserve 배열의 요소를 비교하는데, reserve 의 학생이 lost 학생에게 빌려줄 수 있는 경우
    ➡️ lost가 reserve + 1 or reserve - 1 인 경우
    ➡️ reserve 학생이 다른 lost 학생에게 빌려주지 못하도록 해당 요소의 값을 -1로 바꿔주고, count += 1
    ➡️ 삭제 대신 의미 없는 값을 넣어줌


삽질

  1. 중복되는 값을 먼저 삭제하고, 빌려줄 수 있는 경우를 따로 해줘야하는데, 아무리 생각해도 같은 코드가 따로 두 번 쓰이는 게 싫어서 ArrayList, HashMap 등으로 코딩하려했으나 fail...

  2. for 문 돌다가 삭제하면 오류나는 이유가 가장 컸음

  3. int 배열로는 삭제가 어려우니까 절대 안하고 싶었지만 어쩔 수 없이 함

  4. 비슷한 코드가 두 번 나오는게 맘에 안들지만 결국 해결하긴 했음... 나의 최선.......

  5. 어떤 건 돌아가고 어떤 건 안 돌아가서 질문하기 페이지를 엄청나게 뒤져서 테스트케이스를 많이 얻었다 하하 (근데도 왜 틀린지 모르겠어서 그냥 갈아엎고 배열로 쉽게 해결)


코드

// 프로그래머스 - 체육복

import java.util.*;

public class GymSuit {
	public int solution(int n, int[] lost, int[] reserve) {
		Arrays.sort(lost);
		Arrays.sort(reserve);
		int count = n - lost.length;

		for (int i = 0; i < lost.length; i++) {
			for (int j = 0; j < reserve.length; j++) {
				if (lost[i] == reserve[j]) {
					lost[i] = reserve[j] = -1;
					count++;
				}
			}
		}
		for (int i = 0; i < lost.length; i++) {
			for (int j = 0; j < reserve.length; j++) {
				if (lost[i] == reserve[j] - 1 || lost[i] == reserve[j] + 1) {
					lost[i] = reserve[j] = -1;
					count++;
				}
			}
		}
		return count;
	}

	public static void main(String[] args) {
		GymSuit gymSuit = new GymSuit();
		System.out.println(gymSuit.solution(5, new int[]{2, 4}, new int[]{1, 3, 5}));   // 5
		System.out.println(gymSuit.solution(5, new int[]{2, 4}, new int[]{3}));   // 4
		System.out.println(gymSuit.solution(5, new int[]{2, 4}, new int[]{2}));   // 4
		System.out.println(gymSuit.solution(3, new int[]{3}, new int[]{1}));   // 2
		System.out.println(gymSuit.solution(5, new int[]{5}, new int[]{1}));   // 4
		System.out.println(gymSuit.solution(7, new int[]{2, 4, 7}, new int[]{1, 3, 5}));   // 6
		System.out.println(gymSuit.solution(8, new int[]{5, 6, 7 ,8}, new int[]{4, 7}));   // 6
		System.out.println(gymSuit.solution(5, new int[]{4, 2}, new int[]{3, 5}));   // 5
		System.out.println(gymSuit.solution(13, new int[]{1, 2, 5, 6, 10, 12, 13}, new int[]{2, 3, 4, 5, 7, 8, 9, 10, 11, 12}));   // 11


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

0개의 댓글