코딩연습
[백준 알고리즘] Node.js 1235. 학생 번호
니 뽀
2023. 11. 22. 17:47
1. 문제
https://www.acmicpc.net/problem/1235
1235번: 학생 번호
첫째 줄에는 학생의 수 N(2≤N≤1,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 학생의 학생 번호가 순서대로 주어진다. 모든 학생들의 학생 번호는 서로 다르지만 그 길이는 모두 같으며, 0부
www.acmicpc.net
2. 풀이
- 학생들의 번호를 뒤에서부터 잘랐을 때, 모든 학생들의 번호를 서로 다르게 만들 수 있는 최소의 k를 구하는 문제이다.
- slice 메서드를 이용해서 문자열을 잘랐다
- set 함수를 이용하여 중복을 제거한 후, set의 사이즈와 문자열을 잘랐던 리스트의 길이가 동일하다면 모든 학생들의 번호가 서로 다르다고 생각하고 문제를 해결했다.
const [N, ...students] = require('fs').readFileSync('/dev/stdin')
.toString().trim().split('\n');
const findAns = () => {
let sliceArr = []; // 학생들의 자른 번호들을 담을 배열.
let num = 1; // 얼마나 자를 것인가
while(true){
students.forEach(student => {
const stringLength = student.length; // 학생들의 기존 번호의 길이가 모두 동일하므로 미리 설정.
sliceArr.push(student.slice(stringLength - num)); // 학생들의 기존 번호를 자르고, 배열에 넣어줌.
})
const newSet = new Set([...sliceArr]); // 중복 제거
// 중복 제거한 set의 사이즈와 자른 번호들이 담긴 배열의 길이가 동일하다면 반복문 탈출.
if(newSet.size === sliceArr.length) break;
else { // 길이가 다르다면 자르는 수 추가와 배열 초기화.
num++;
sliceArr = [];
}
}
return num;
}
console.log(findAns());