농구 경기

문제

언어

  • JavaScript

순서도

  1. 알파벳의 개수 크기의 배열 생성
  2. 각 선수의 성의 첫 글자를 유니코드로 변환 후 그 값을 index 로 사용해서 개수 세기
  3. 성의 첫 글자의 개수가 5 이상인 경우, 출력할 문자열에 첫 글자 추가
  4. 2 번, 3 번 과정을 통해 만든 문자열 출력
  5. 성의 첫 글자의 개수가 5 이상인 경우가 없다면 “PREDAJA” 출력

문제 풀이 step 1

  • 각 선수의 성이 주어지는데, 성의 첫 글자가 같은 선수 5 명이 있는 경우를 모두 구하고, 그 선수들의 성의 첫 글자를 사전순으로 공백없이 출력하는 문제입니다.
    • 각 선수의 성은 알파벳 소문자로만 이루어져있습니다.
  • 본 문제는 문자를 유니코드로 변환해주는 String.prototype.charCodeAt() 함수를 이용하면 쉽게 풀 수 있습니다.
  • 우선, 알파벳의 개수 크기의 배열을 생성합니다.
  • 그리고 각 선수마다 그 선수의 성의 첫 글자를 유니코드로 변환합니다.
  • 그리고 변환한 그 코드 값을 위에서 선언한 배열의 index 로 간주하고 개수를 세어줍니다.
  • 그리고 배열을 순회하며 개수가 5 이상인 경우만 모아서 출력하면 정답이 됩니다.
  • 추가 설명은 주석으로 작성하겠습니다.

소스 코드

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

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

	// 알파벳 크기의 배열 생성
	const alphabetCnts = Array.from({length: 26}, () => 0);

	for (let i = 1; i < n + 1; i++) {
		// 각 선수의 성의 첫 글자
		const ch = input[i][0];

		// 첫 글자를 유니코드로 변환 후 개수 세기
		alphabetCnts[ch.charCodeAt(0) - "a".charCodeAt(0)] += 1;
	}

	let res = "";
	for (let i = 0; i < 26; i++) {
		// 개수가 5 이상인 경우 출력할 문자열에 추가
		if (alphabetCnts[i] >= 5) res += String.fromCharCode(i + "a".charCodeAt(0));
	}

	// 개수가 5 이상인 경우가 없다면 "PREDAJA" 출력
	if (res === "") return "PREDAJA";
	else return res;
};

console.log(solution(input));