728x90

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

Code

https://github.com/DasolPark/Algorithm_JavaScript/blob/9c69b97d5fdc20167e9804bf0d73d8245c73732e/Baekjoon/5622.js

😢 알파벳을 직접 손으로 입력하고 싶지 않았고, Object로 value(각 지연 시간)까지 넣어서 진행하고 싶었다.
큰 어려움은 없었고, 중심을 Object로 만들고 푸는 과정에서 어떻게 진행할지 조금 고민했다.

😊 'A'부터 'Z'까지 진행하는 for loop을 열고, 'PQRS', 'WXYZ'는 예외로 들어가도록 조건문을 걸어주었다.
( i !== 'R'charCodeAt(0) && i !== 'Y'.charCodeAt(0) )으로 조건을 넣어준 이유는,
'PQRS', 'WXYZ' 이 2가지만 제외하면 모두 길이가 3이다. 그래서 길이 3으로 저장되기 전인 R or Y에서 저장을 차단하고,
앞의 두 문자가 각각 합쳐져 길이가 4가 되었을 때 key로 저장되도록 했다.

Object를 만들어준 후에, 입력 받고 split('')한 값에 reduce달았고, 안에 Object를 반복하는 for ... in loop을 열어주었다.
그렇게 입력받은 값 중각 key에 해당하는 문자가 있다면, acc에 해당 key의 value를 중복 저장해주고 return 해주었다.
결과적으로 result값에 전화를 걸기 위해 필요한 시간이 저장된다.

다른 풀이도 확인해보았지만, 대부분 직접 알파벳을 입력해서 사용하였고, 특별히 다른 점을 찾지 못 했다.

✔ Object {}

{ 'ABC' : 3, 'DEF': 4 ... } 이런 식으로 전체 알파벳을 저장하기 위해 작성하였다.

✔ charCodeAt()

해당 알파벳의 ASCII Code(숫자)를 알아내서 for loop을 이용하기 위해 사용하였다.

✔ String.fromCharCode()

()안에 ASCII코드를 넣어서 문자를 가져오기 위해 사용하였다.

✔ reduce

전화를 걸기 위해 필요한 시간을 중복 저장하기 위해 사용하였다.

✔ for ... in

Object의 key을 가져오는 for loop을 이용하기 위해 사용하였다.

위의 Skill들은 JavaScript - Helper methods or Grammar 카테고리에서 간단한 사용방법을 확인할 수 있다.

Full Code

// 2nd Solution
 
// For submit
 
// const fs = require('fs');
// const input = fs.readFileSync('/dev/stdin').toString().trim();
 
// For local test
const input = 'UNUCIC';
const splitInput = input.split('');
const charMap = {};
let charStack = '';
let counter = 3;
 
for (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) {
charStack += String.fromCharCode(i);
 
if (
charStack.length === 3 &&
i !== 'R'.charCodeAt(0) &&
i !== 'Y'.charCodeAt(0)
) {
charMap[charStack] = counter;
counter++;
charStack = '';
} else if (charStack.length === 4) {
charMap[charStack] = counter;
counter++;
charStack = '';
}
}
 
const result = splitInput.reduce((acc, char) => {
for (let stage in charMap) {
if (stage.includes(char)) {
acc += charMap[stage];
}
}
return acc;
}, 0);
 
console.log(result);
 
// 1st Solution
 
// For submit
 
// const fs = require('fs');
// const input = fs.readFileSync('/dev/stdin').toString().trim();
 
// For local test
// const input = 'UNUCIC';
// const splitInput = input.split('');
// const charMap = {};
// let charStack = '';
// let counter = 3;
 
// for (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) {
// charStack += String.fromCharCode(i);
 
// if (
// charStack.length === 3 &&
// i !== 'R'.charCodeAt(0) &&
// i !== 'Y'.charCodeAt(0)
// ) {
// charMap[charStack] = counter;
// counter++;
// charStack = '';
// } else if (charStack.length === 4) {
// charMap[charStack] = counter;
// counter++;
// charStack = '';
// }
// }
 
// let eachTime = 0;
// const result = splitInput.map(char => {
// for (let stage in charMap) {
// if (stage.includes(char)) {
// eachTime += charMap[stage];
// }
// }
// return eachTime;
// });
 
// console.log(result[result.length - 1]);

+ Recent posts