https://www.acmicpc.net/problem/1620
const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n')
const [pockN, probN] = input[0].split(' ').map(Number)
const arr = input.slice(1, 1 + pockN)
const prob = input.slice(1 + pockN)
const solution = (arr, prob) => {
let dict = {}
let answer = ''
arr.forEach((el,i) => {
dict[el] = i+1
dict[i+1] = el
})
prob.forEach(el => {
answer += '\n' + dict[el]
})
return answer.slice(1)
}
console.log(solution(arr, prob))
예제 입력
const arr = [ 'Bulbasaur', 'Ivysaur', 'Venusaur', 'Charmander',
'Charmeleon', 'Charizard', 'Squirtle', 'Wartortle',
'Blastoise', 'Caterpie', 'Metapod', 'Butterfree',
'Weedle', 'Kakuna', 'Beedrill', 'Pidgey', 'Pidgeotto',
'Pidgeot', 'Rattata', 'Raticate', 'Spearow',
'Fearow', 'Ekans', 'Arbok', 'Pikachu', 'Raichu' ]
const prob = [ '25', 'Raichu', '3', 'Pidgey', 'Kakuna' ]
예제 출력
Pikachu
26
Venusaur
16
14
입력값 arr의 요소를 이름 또는 번호로 접근할 수 있도록
dict 객체를 생성하여 각각 저장하는 방식으로 풀었다.
TypeScript를 선택한다면 양방향 매핑이 되는 enum 타입으로 훨씬 간단히 풀 수 있을 거 같다.
const solution = input => {
const k = input.shift().split(' ').map(e => parseInt(e));
const x = {};
input.splice(0, k[0]).forEach((e, i) => {
x[e] = (i + 1);
x[i + 1] = e;
});
return input.map(e => x[e]).join('\n')
}
console.log(solution(input))
기본적으로 과정은 위의 풀이와 동일하나 새로 변수를 생성하여 재할당하지않고
shift()와 splice()을 사용해서 배열의 분리와 활용을 동시에 이루었다는 점에서 참 획기적이다.