프로그래머스

[프로그래머스] 완주하지 못한 선수 (JAVA)

코 밑 2025. 5. 30. 01:02
Contents

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

마라톤 경주를 하는데 한명의 선수를 제외하곤 모든 선수가 완주에 성공했다.

 

매개변수로는 이렇고 주어진다.

1. 참여한 선수 명단 배열

2. 완주에 성공한 선수 명단 배열

완주에 실패한 한명의 선수 이름을 반환해야 한다.

 

1. 해시 미사용

import java.util.*;

// 완주하지 못한 선수(해시)
// 마라톤 경주는 한 명을 제외하곤 모두가 완주 못돌아온 선수 반환
// 매개변수 : 참여한 선수 배열, 완주한 선수 배열
class Solution {
	public String solution(String[] participant, String[] completion) {
		// 배열 두개 오른차순 정렬
		Arrays.sort(participant);
		Arrays.sort(completion);

		for (int i = 0; i < completion.length; i++) {
			// 둘이 다르다면 반환
			if (!participant[i].equals(completion[i])) {
				return participant[i];
			}
		}

		return participant[participant.length - 1];
	}
}

해시 문제인데 사용 안해도 해결이 가능하다.

두 매개변수를 정렬한 후 같은 순서로 꺼내봤을 때 둘이 다른 값이 나오는 경우가 꼭 있다.

그 때가 completion 변수에 한명이 빠져있어서 걸러지게 된다.

빠진 선수가 마지막 순서인 경우는 마지막 줄이 반환하면서 해결해준다.

 

2. 해시 사용

import java.util.*;

// 완주하지 못한 선수(해시)
// 마라톤 경주는 한 명을 제외하곤 모두가 완주 못돌아온 선수 반환
// 매개변수 : 참여한 선수 배열, 완주한 선수 배열
class Solution {
	public String solution(String[] participant, String[] completion) {
		HashMap<String, Integer> hashMap = new HashMap<>();

		// 해시맵에 배열을 넣어줌
		for (String str : participant) {
			// getOrDefault : 키가 등록이 안되어있다면 뒤의 숫자, 되어있다면 뒤의 서술이 들어감
			// ex) 아래의 경우 (a, 0) -> (a, 1) a 두번 등록 시 이렇게 됨
			hashMap.put(str, hashMap.getOrDefault(str, 0) + 1);
		}

		for (String str : completion) {
			hashMap.put(str, hashMap.get(str) - 1);
		}

		// keyset : map에서 밸류값 전체 꺼내보기
		for (String str : hashMap.keySet()) {
			// 밸류값이 0이 아니라면 그 키 반환
			if (hashMap.get(str) != 0) {
				return str;
			}
		}

		return "";
	}
}

해시를 사용하는 경우는

먼저 해시맵에 키엔 선수 명단, 밸류엔 숫자를 넣는다.

근데 선수 이름이 중복이 되는 경우가 있으므로 카운팅을 위해 getOrDeault() 함수를 사용했다.

만약 명단이 {"a", "a", "b,"}라면

맵 안에는 a = 2, b = 1 이런 형태로 존재하게 된다.

 

다음 반복문에서는 맵과 완주에 성공한 선수 명단을 대조해서 일치하면 맵의 밸류를 -1해준다.

 

마지막으로 맵 안에서 밸류가 0이 아닌 키를 반환하면 된다.

 

https://github.com/qTeTp/Algo/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/42576.%E2%80%85%EC%99%84%EC%A3%BC%ED%95%98%EC%A7%80%E2%80%85%EB%AA%BB%ED%95%9C%E2%80%85%EC%84%A0%EC%88%98

 

Algo/프로그래머스/1/42576. 완주하지 못한 선수 at main · qTeTp/Algo

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - qTeTp/Algo

github.com