BOJ[1919] - 애너그램 만들기 by JavaScript
애너그램 만들기
문제
언어
- JavaScript
순서도
- 첫 번째 단어에서 a ~ z 까지 각각 몇 개 있는지 세기
- 두 번째 단어에서 a ~ z 까지 각각 몇 개 있는지 세기
- 첫 번째 단어와 두 번쨰 단어의 각각의 문자가 총 몇 개 차이나는지 세기
문제 풀이 step 1
- 애너그램 관계란,
- 두 영어 단어의 철자의 순서를 뒤바꾸어 같아질 수 있는 경우, 두 단어는 애너그램 관계에 있다고 합니다.
- occurs 와 succor
- ared 와 read
- 두 개의 영어 단어가 주어졌을 때, 두 단어가 서로 애너그램 관계에 있도록 만들기 위해서 제거해야 하는 최소 개수의 문자 수를 구하는 문제입니다.
문제 풀이 step 2
- 애너그램 관계가 되려면 두 영어 단어의 각 철자의 개수가 서로 동일해야 합니다.
- 그렇다면, 각각 단어에서 각 철자의 개수를 세고, 서로 차이가 나는 철자만큼 제거하면 애너그램 관계가 될 것입니다.
- 따라서 첫 번째 단어와 두 번째 단어 각각 a ~ z 까지 각 철자가 몇 개씩 있는지 세어줍니다.
- 그리고 첫 번째 단어와 두 번째 단어 각각 a ~ z 까지 각 철자의 차이가 몇개 있는지 세어주고 다 더해주면 정답입니다.
- 추가 설명은 주석으로 작성하겠습니다.
소스 코드
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
const solution = (input) => {
// a ~ z 까지 개수를 세기 위한 배열
const a = Array(26).fill(0);
const b = Array(26).fill(0);
// 첫 번째 단어 각 철자의 개수 세기
for (let ch of input[0].split("")) {
const index = ch.charCodeAt(0) - "a".charCodeAt(0);
a[index] += 1;
}
// 두 번째 단어 각 철자의 개수 세기
for (let ch of input[1].split("")) {
const index = ch.charCodeAt(0) - "a".charCodeAt(0);
b[index] += 1;
}
// 두 단어의 각 철자의 개수 차이 세기
let ans = 0;
for (let i = 0; i < 26; i++) {
ans += Math.abs(a[i] - b[i]);
}
return ans;
};
console.log(solution(input));