728x90
문제
https://www.acmicpc.net/problem/6996
6996번: 애너그램
첫째 줄에 테스트 케이스의 개수(<100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 100을 넘지 않는 단어가 공백으로 구분되어서 주어진다. 단어는 알파벳 소문자로만 이루어
www.acmicpc.net
코드
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\r\n');
//input[0] = '3'
//input[1] = 'blather reblath'
//input[2] = 'maryland landam'
//input[3] = 'bizarre brazier'
let anagrams = [];
let anagram = [];
const len = parseInt(input[0]); //3
for (let i=1; i<=len; i++) { //input의 index가 1~3이기 때문에 1부터 시작
anagrams.push(input[i].split(" ")); //배열화 시키기
}
//anagrams = [['blather', 'reblath'], ['maryland', 'landam'], ['bizarre', 'brazier']]
for (let j=0; j<anagrams.length; j++) {
for (k=0; k<anagrams[j].length; k++) {
anagram.push(anagrams[j][k].split("").sort().join("")); //문자열 오름차순으로 정렬
}
}
//anagram = ['abehlrt', 'abehlrt', 'aadlmnry', 'aadlmn', 'abeirrz', 'abeirrz']
let m = 0;
for (let l=0; l<anagram.length; l+=2) {
if (anagram[l] === anagram[l+1]) { // [0,1], [2,3], [4,5] << 이 index대로 각각 비교하여 일치하면 anagram
console.log(`${anagrams[m][0]} & ${anagrams[m][1]} are anagrams.`); //출력할때는 원본을 출력해야 하니 anagrams배열에서 가져오기
m++;
}
else {
console.log(`${anagrams[m][0]} & ${anagrams[m][1]} are NOT anagrams.`);
m++;
}
}
// 결과
// blather & reblath are anagrams.
// maryland & landam are NOT anagrams.
// bizarre & brazier are anagrams.
후기
- 문제를 보자마자 각 문자열을 정렬해서 일치하면 anagram 으로 판단해야겠다는 생각을 하였다
- 내 풀이보다 for문을 더 줄이고 코드를 더 간결하게 하고 싶었으나 배열 이해 부족인지 문자열 이해 부족인지 쉽지 않았다
- 다른 분들의 풀이를 보니 map을 이용해서 많이들 풀이하셨다! 마지막 출력하는 for문에서는 삼항연산자를 이용하면 더 간결해질 것 같다는 생각이 든다
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] K번째 수 / JavaScript / node.js (0) | 2022.02.03 |
---|---|
[백준] 알파벳 개수 / JavaScript / node.js (0) | 2022.02.02 |
[백준] 먹을 것인가 먹힐 것인가 / JavaScript / node.js (0) | 2022.02.01 |
[백준] 유기농 배추 / JavaScript / node.js (0) | 2022.01.31 |
[백준] DFS와 BFS / JavaScript / node.js (0) | 2022.01.30 |