개발자 첫걸음/백준

백준 구현 - 농구 경기 [1159]

프로아마추어 2022. 10. 12. 20:55

https://www.acmicpc.net/problem/1159

 

1159번: 농구 경기

상근이는 농구의 세계에서 점차 영향력을 넓혀가고 있다. 처음에 그는 농구 경기를 좋아하는 사람이었다. 농구에 대한 열정은 그를 막을 수 없었고, 결국 상근이는 농구장을 청소하는 일을 시작

www.acmicpc.net

 

1. 요약하면 입력은 줄 바꿈으로 들어오며 첫 입력을 숫자 그 다음 부터는 문자열을 받는다.
2. 각 문자열의 첫 글자를 따서 같은 문자가 5개 이상인 경우 오름차 순으로 나열하여 문자열로 출력한다.
3. 만약 5개 이상인 문자가 없다면 'PREDAJA'를 출력한다. (따옴표 없이)

 

나의 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const input = require("fs")
  .readFileSync(0)
  .toString()
  .split("\n")
  .map((i) => i.trim());
 
input.shift();
 
const map = new Map();
 
input.forEach((i) => {
  const value = map.get(i[0]) ? map.get(i[0]) + 1 : 1;
  map.set(i[0], value);
});
 
const answer = [];
 
for (let [k, v] of map.entries()) {
  if (v >= 5) {
    answer.push(k);
  }
}
 
if (!answer.length) {
  console.log("PREDAJA");
else {
  const arrToString = answer
    .sort((a, b) => a.charCodeAt() - b.charCodeAt())
    .join("")
    .trim();
 
  console.log(arrToString);
}
cs
1. 문제의 로직 자체는 어렵지 않았다. 그러나 웬걸 계속해서 정답이 틀렸다는 응답을 받았다.
2. 전혀 예상치 못한 곳의 에러였다. 28번 line에 적어둔 sort메서드에서 단순히 문자를 비교했을 때는 정렬이 되지 않는 문제였다.
3. 처음 작성한 코드 sort((a, b) => a - b); 
4. 변경한 코드 sort((a, b) => a.charCodeAt() - b.charCodeAt()); 
5. charCodeAt으로 문자를 오름차 순으로 배치하였다.