[백준 알고리즘] Node.js 1380. 귀걸이
2023. 3. 30. 17:12ㆍ코딩연습
1. 문제
https://www.acmicpc.net/problem/1380
1380번: 귀걸이
입력은 번호를 가진 시나리오들로 구성됩니다. 시나리오 번호는 1부터 순서대로 증가하고, 각 시나리오는 아래의 내용을 포함합니다. 한 줄에 귀걸이를 압수당한 여학생의 수, n (1 ≤ n ≤ 100)이
www.acmicpc.net
2. 풀이
- 여러개의 테스트 케이스가 있는 경우이다.
- 테스트 케이스의 첫번째 줄 학생의 수 n, 다음 n 줄에 걸쳐서 학생의 이름, 2n-1줄 만큼 뺏고 돌려준 자료가 나온다.
const inputs = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
let result = "";
let line = 0
while(inputs[0] !== '0'){
let n = Number(inputs.shift()); // 압수당한 학생의 수
let students = []; // 학생의 이름을 모은 배열
for(let i = 0; i < n; i++){
students.push(inputs.shift());
}
let studentsIndexArr = []; // 2n-1 줄에 입력된 숫자들을 모은 배열.
for(let i = 0; i < 2*n-1; i++){
let [num, alp] = inputs.shift().trim().split(' ');
studentsIndexArr.push(Number(num));
}
let earrings = []; // 돌려받지 못한 학생의 인덱스를 담을 배열
for(let i = 1; i <= n; i++){
if(studentsIndexArr.filter(item => item === i).length % 2 !== 0) earrings.push(i-1)
}
// 단 한 명의 학생만 받지 못한다는 가정하에 작성한 result.
result += `${line+1} ${students[earrings[0]]}\n`
line++;
}
console.log(result);
- 위의 경우는 무조건 한명만 돌려받지 못한다는 가정하에 작성한 코드이다.
3. 정리
- 문제 이해는 쉽게 하였지만 코드를 작성하는 부분에서 시간이 오래걸렸다.
질문게시판을 찾아보니 귀걸이를 돌려받지 못한 학생의 수가 하나가 아닐 수도 있다는 점이 있다는 사실을 알았지만, 다른 분들이 작성한 정답들을 보니 귀걸이를 돌려받지 못한 학생의 수가 단 한 명이라는 가정하에 작성하신 듯 보였다.
- 처음 작성할 때 while문이 아닌 for문을 잘못된 조건으로 작성하여 "틀렸습니다" 를 받았다. for문으로 조건을 작성할때에 더욱 유의해서 코드를 작성할 수 있도록 해야겠다.
'코딩연습' 카테고리의 다른 글
[백준 알고리즘] Node.js 14215. 세 막대 (0) | 2023.05.13 |
---|---|
[프로그래머스] 카드 뭉치 (0) | 2023.04.12 |
[백준 알고리즘] Node.js 1343. 폴리오미노 (0) | 2023.03.29 |
[백준 알고리즘] Node.js 1340. 연도 진행바 (0) | 2023.03.29 |
[백준 알고리즘] Node.js 1331. 나이트 투어 (0) | 2023.03.28 |