본문 바로가기

코테/백준

[백준] 17269 이름궁합 테스트

728x90

[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의 쓰임에 대해 다시 공부하게 되었습니다.

728x90

'코테 > 백준' 카테고리의 다른 글

[백준] 10773 제로  (0) 2024.10.22
[백준] 1676 팩토리얼 0의 개수  (0) 2024.10.17