코딩연습

[백준 알고리즘] 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());