본문 바로가기

코딩/알고리즘

백준) 2204 - 도비의 난독증 테스트 JS

📌 문제 링크

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


📌 문제 탐색하기

  • 영어 단어가 있을 때 각 줄에 각 테스트케이스에서 대소문자를 구분하지 않고 사전 상 가장 앞서는 단어를 출력한다.

시간복잡도

  • O(nlogn)

알고리즘 선택

  • 정렬

📌 코드 설계하기

  1. 문제의 `input`을 개행으로 분리하여 가져옵니다.
  2. 인덱스를 표현할 `index`를 초기화해줍니다.
  3. `input`의 길이 만큼 반복문을 돌게 합니다.
  4. `input`에 있는 문자열 숫자를 인덱스에 따라 숫자로 변환해 줍니다.
  5. 숫자가 `0`이라면 반복문을 멈춥니다.
  6. 각 테스트케이스 별로 단어들의 길이를 `slice()`하여 새로운 배열 `words`을 만듭니다.
  7. `words`를 사전순으로 정렬합니다.
  8.  가장 앞서있는 단어를 출력합니다.
  9. `index`에 `숫자 + 1`을 더하여 다음 테스트 케이스로 이동합니다.

 


📌 정답 코드

//https://www.acmicpc.net/problem/2204
export {};

const fs = require('fs');
const filePath =
  process.platform === 'linux' ? '/dev/stdin' : __dirname + '/input1.txt';
const input = fs.readFileSync(filePath).toString().trim().split('\n');

let index = 0;
while (index < input.length) {
  const t = parseInt(input[index], 10);
  if (t === 0) break;

  const words = input.slice(index + 1, index + 1 + t);

  const result = words.reduce((smallest: string, current: string) =>
    current.toLowerCase().localeCompare(smallest.toLowerCase()) < 0
      ? current
      : smallest
  );

  console.log(result);
  index += t + 1;
}

'코딩 > 알고리즘' 카테고리의 다른 글

백준) 2303 - 숫자게임 JS  (0) 2024.10.25
백준) 5567 - 결혼식 JS  (0) 2024.10.24
백준) 2644 - 촌수계산 JS  (0) 2024.10.22
백준) 11724 - 연결 요소의 개수 JS  (0) 2024.10.21
백준) 17204 - 죽음의 게임  (3) 2024.10.20