회사에 있는 사람

문제

언어

  • JavaScript

순서도

  1. 출입 기록을 보면서 “enter” 면 Map 에 직원의 이름을 key 값으로 true 를 value 값으로 넣기
  2. 출입 기록이 “leave” 면 Map 에 있는 직원의 이름을 key 값으로 false 를 value 값으로 설정
  3. Map 에서 value 값이 true 인 직원의 이름만 별도의 배열에 모으기
  4. 별도의 배열에 있는 직원의 이름들을 사전 순의 역순으로 출력하기

문제 풀이 step 1

  • 상근이가 다니는 회사의 출입 기록이 있는데, 그 기록을 보면서 현재 회사에 있는 모든 사람을 구하는 문제입니다.
  • 우선, Map 을 선언합니다.
  • 모든 출입 기록을 확인합니다.
    • 출입 기록을 보면서, “enter” 인 경우 직원의 이름을 key 값으로 해서 true 를 value 값으로 설정합니다.
    • 출입 기록을 보면서, “leave” 인 경우 직원의 이름을 key 값으로 해서 false 를 value 값으로 설정합니다.
  • 출입 기록을 다 확인했으면, Map 에서 value 값이 true 인 직원만 모두 모읍니다.
  • 모든 직원들을 사전 순의 역순으로 정렬하고 출력하면 정답입니다.
  • 추가 설명은 주석으로 작성하겠습니다.

소스 코드

const input = require("fs")
	.readFileSync("/dev/stdin")
	.toString()
	.trim()
	.split("\n");

const solution = (input) => {
	const n = Number(input[0]);

	// Map 선언
	const map = new Map();

	// 모든 출입 기록 확인
	for (let i = 1; i < n + 1; i++) {
		const [name, status] = input[i].split(" ");

		// "enter" 인 경우 Map 에 true 로 설정
		if (status === "enter") map.set(name, true);
		// "leave" 인 경우 Map 에 false 로 설정
		else map.set(name, false);
	}

	let res = [];
	// value 값이 true 인 직원만 모두 모으기
	for (let item of map) {
		if (item[1] === false) continue;
		res.push(item[0]);
	}

	// 사전 순의 역순으로 정렬하고 출력하기
	return res.sort().reverse().join("\n");
};

console.log(solution(input));