백준-Node.js-1620, 나는야 포켓몬 마스터 이다솜

송철진·2023년 3월 12일
0

백준-Node.js

목록 보기
51/69

문제

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()을 사용해서 배열의 분리와 활용을 동시에 이루었다는 점에서 참 획기적이다.

profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글