본문 바로가기

백준/JavaScript

[JS] 백준 심화 1 - 두 번째 이야기

728x90

 

 

 

오늘은 심화 1 두 번째 시간이다.

 

 

 

문제 10988번

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

 

10988번: 팰린드롬인지 확인하기

첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

www.acmicpc.net

 

앞 뒤에서 읽을 때 똑같은 단어이면 1, 아니면 0을 출력하라고 한다.

음... 일단 입력값을 배열에 받고, 이를 역순으로 뒤집어서 다른 배열에 넣은 다음 둘을 비교하면 되지 않을까...?

 

const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require('fs').readFileSync(readFileSyncAdress).toString().trim();

const rinput = input.split('').reverse().join('');

console.log(input===rinput ? 1:0);

 

 

ㅎㅎ

처음에 input을 역순으로 뒤집을 때 reverse()만 사용해서 오류가 발생했다. 나눠주고(split) 붙여주는(join) 함수도 같이 써야 했는데... 이젠 절대 잊어버리지 말아야지!

 

예제로 테스트를 해보니 아주 잘 나와서 제출했더니 틀렸다는 결과가 나왔다...

그래서 계속 보다가 [참고]에 있는 첫 번째 주소의 풀이를 보니 trim()이 있어서 '혹시... 공백이 들어갔나??' 라는 생각에 얼른 넣어줬다.

그랬더니 맞았습니다라는 결과가 나왔다 ㅎㅎ.

이런 거 받을 때 trim()은 필수적으로 생각해야겠다. 

 

 

다른 풀이를 보니까 길이를 반으로 나눠서 왼쪽 오른쪽으로 나눠주고, 오른쪽을 역순으로 만들어서 비교해주는 분도 있었다.

const input = require('fs').readFileSync(/dev/stdin).toString().trim().split('\n');
const str = input[0];

const lng = str.length/2
const left = str.slice(0,lng);
const right = str.slice(Number.isInteger(lng)?lng:parseInt(lng)+1)

if(left===right.split('').reverse().join('')) console.log(1)
else console.log(0)

출처: https://velog.io/@ahrkwltlarh/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-10988%EB%B2%88

 

 

[참고] https://zuni.kim/posts/baekjoon-10988/

 

 

 

오늘은 마중나가야하는 사람이 있어서 여기까지 해야겠다...

그럼 안녕~~~

 

 

 

728x90