문제링크: https://www.acmicpc.net/problem/5052
문자열 + 배열 정렬 + 해쉬맵 으로 푼 문제이다.
프로그래머스에 비슷한 문제가 있었던 것 같다.
나는 해쉬맵에 번호를 저장하고, 다음 전화번호를 digit 하나씩 더하면서 합친 문자열이 해쉬맵에 있는지 확인하는 로직으로 문제를 해결했다.
위와 같은 로직을 사용하기위해서는
1. 우선 테스트 케이스 정렬을 해야한다.
1-1. 정렬하지 않는다면 91125426 , 911 값이 들어올 경우에는 해당 전화번호가 일관성이 있다고 판단해버리기 때문이다.
2. 전화번호의 digit 하나씩 더해가면서 해쉬맵에 있는지 체크한다.
2-1. 없다면 해당 전화번호를 해쉬맵에 넣는다.
2-2. 있다면 for문을 break 한다.
const fs = require('fs');
BOJkey = false;
let input = fs
.readFileSync(BOJkey ? './javascript/5052/input.txt' : './dev/stdin')
.toString()
.trim()
.split('\n')
.reverse();
const answer = [];
const T = Number(input.pop());
for (let i = 0; i < T; i++) {
const N = Number(input.pop());
const phoneMap = {};
let consistency = 'YES';
const arr = [];
for (let j = 0; j < N; j++) arr.push(input.pop());
arr.sort();
for (let j = 0; j < N; j++) {
const phone = arr[j];
let str = [];
let flag = false;
for (let digit of phone) {
str.push(digit);
if (phoneMap[str.join('')] !== undefined) {
consistency = 'NO';
flag = true;
break;
}
}
if (flag) break;
phoneMap[phone] = 1;
}
answer.push(consistency);
}
console.log(answer.join('\n'));
'공부기록 > 자바스크립트 코딩테스트' 카테고리의 다른 글
[백준/JS] 1700 멀티탭 스케줄링 (4) | 2023.03.29 |
---|---|
[백준/JS] 1946 신입사원 (3) | 2023.03.28 |
[백준/JS] 1026 보물 (5) | 2023.03.26 |
[백준/JS] 1449 수리공 항승 (4) | 2023.03.24 |
[백준/JS] 2661 좋은 수열 (4) | 2023.03.24 |