[Silver 5] 17269 이름궁합 테스트
구분
알고리즘 > 구현
풀이 요약
길이가 다른 두 문자열 A, B의 알파벳 획수를 더해 이름 궁합을 계산하는 구현 문제
나의 풀이
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\\n");
const [N, M] = input[0].split(" ").map(Number);
const [A, B] = input[1].split(" ").map(String);
let sum = [];
const num = [
3, 2, 1, 2, 4, 3, 1, 3, 1, 1, 3, 1, 3, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1,
];
const alphabet = [
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z",
];
let sumArr = "";
let maxLength = Math.max(N, M);
for (let i = 0; i < maxLength; i++) {
if (i < N) {
sumArr += A[i];
}
if (i < M) {
sumArr += B[i];
}
}
for (let i = 0; i < sumArr.length; i++) {
let index = alphabet.indexOf(sumArr[i]);
sum.push(num[index]);
}
while (sum.length > 2) {
let temp = [];
for (let i = 0; i < sum.length - 1; i++) {
temp.push((sum[i] + sum[i + 1]) % 10);
}
sum = temp;
}
console.log(sum[0] == 0 ? `${sum[1]}` + "%" : `${sum[0]}${sum[1]}` + "%");
입력의 예시에서 이름이 A 혹은 B가 길어서 이름이 남을 경우 뒤에 남은 글자를 추가로 붙여주기 위해 if문을 사용해서 남는 글자들을 붙여줬습니다. 또 for문을 통해 알파벳에 대응되는 인덱스 위치를 찾아 그 인덱스에 해당하는 num 배열의 값을 가져오게 했습니다.
예를 들어, AB CD라는 이름 두 개가 주어졌다고 가정해 봅시다.
i=0 일 때 : merged [0]=”A”
alphabet.indexOf(”A”)를 수행하고 그 값은 0이고, num [0]에 해당하는 값 3을 sum 배열에 추가합니다.
i=1일 때: merged [1]=”B”
alphabet.indexOf(”B”)를 수행하고 그 값은 1이고, num [1]에 해당하는 값 2를 sum 배열에 추가합니다.
또, while문에서 sum 배열의 길이가 2가 될 때까지 배열의 숫자들을 인접한 두 숫자씩 더하고 그 결과를 다시 배열로 저장합니다. %10을 해주는 이유는 두 숫자를 더한 결과의 1의 자리를 얻기 위함입니다.
예를 들어, sum=[3,1,2,2]가 있다고 예를 들면 sum 배열의 길이가 4이므로 while문이 실행되고
sum [0] + sum [1] = 4
sum[1] + sum [2] = 3
sum[2] + sum [3] = 4
temp=[4,3,4]가 됩니다. sum 배열은 다시 temp배열로 업데이트가 되고 배열의 길이가 3이기 때문에 while문이 실행됩니다.
sum [0] + sum [1]= 7
sum[1] + sum [2] = 7
temp=[7,7]이고 배열의 길이가 2가 되었으므로 종료되고 최종 궁합점수는 77%가 됩니다.
배운 점
문제를 풀 때, temp.push((sum [i] + sum[i + 1]) % 10);에서 괄호를 잘못 씌워서 계속 원하는 답이 안 나왔었는데 이 점을 주의해야겠다고 생각했습니다. 또한 indexOf의 쓰임에 대해 다시 공부하게 되었습니다.
'코테 > 백준' 카테고리의 다른 글
[백준] 1920 수 찾기 (0) | 2024.11.03 |
---|---|
[백준] 1018 체스판 다시 칠하기 (0) | 2024.10.27 |
[백준] 10448 유레카 이론 (0) | 2024.10.27 |
[백준] 10773 제로 (0) | 2024.10.22 |
[백준] 1676 팩토리얼 0의 개수 (0) | 2024.10.17 |