Skip to content
On this page

Programmers 42576. 완주하지 못한 선수

Title
Programmers 42576. 완주하지 못한 선수
Category
Algorithm
Tags
Aliases
Programmers 42576. 완주하지 못한 선수
Created
3 years ago
Updated
last year

코딩테스트 연습 - 완주하지 못한 선수

문제 유형난이도걸린 시간해결 유무(✅/❌)
해시lv.130분

설계 방법

  1. JavaScript의 Map 자료구조를 사용

  2. 동명이인이 가능한 완주자 이름이 담긴 배열을 보고 완주자 이름 : 이름이 나온 횟수 의 해쉬 맵을 만듬

  3. 참가자 배열을 순회하면서, 해쉬 맵에 참가자 이름이 있으면 이름이 나온 횟수를하나씩 줄임

    • 만약 참가자 이름이 해쉬맵에 없거나 이름이 나온 횟수가 0 이라면 이 사람이 완주하지 못한 사람이므로 이 사람의 이름을 반환함

코드

javascript
function solution(participants, completions) {
	const personCountsByNames = new Map();

	participants.forEach((name) => {
		personCountsByNames.set(name, (personCountsByNames.get(name) || 0) + 1);
	});

	completions.forEach((name) => {
		personCountsByNames.set(name, (personCountsByNames.get(name) || 0) - 1);
	});

	for (let [name, personCount] of personCountsByNames) {
		if (personCount === 1) {
			return name;
		}
	}
}
function solution(participants, completions) {
	const personCountsByNames = new Map();

	participants.forEach((name) => {
		personCountsByNames.set(name, (personCountsByNames.get(name) || 0) + 1);
	});

	completions.forEach((name) => {
		personCountsByNames.set(name, (personCountsByNames.get(name) || 0) - 1);
	});

	for (let [name, personCount] of personCountsByNames) {
		if (personCount === 1) {
			return name;
		}
	}
}

시간 복잡도

O(n)

어려웠던 점

  • JS에서 해쉬를 구현하기 위해 객체를 사용할지, Map 자료구조를 사용할 지 고민함

  • 성능상 Map이 이점이 있다는 것을 알고 Map을 사용하기로 함

  • Map은 JS의 객체와는 다르게 get, set 메소드를 사용해서 조작하기 때문에 가독성면에서 조금 떨어지는 듯함.

  • 다른 사람의 한 줄 짜리 풀이를 봤는데 이해하기 어려웠음

javascript
var solution = (_, $) =>
	_.find(
		(_) => !$[_]--,
		$.map((_) => ($[_] = ($[_] | 0) + 1)),
	);
var solution = (_, $) =>
	_.find(
		(_) => !$[_]--,
		$.map((_) => ($[_] = ($[_] | 0) + 1)),
	);

참고자료

Released under the MIT License.