본문 바로가기

백준/JavaScript

[JS] 백준 문자열 - 두 번째 이야기

728x90

 

 

 

오늘은 슬픈 소식이 있다...

어제 핫스팟을 켜서 남아있던 데이터를 모두 사용했다(내 데이터...).

 

아직도 와이파이가 없는 관계로 이번에는 데이터가 무제한인 아버지의 폰으로 핫스팟을 켰다...

무제한이라고 해도 너무 많이 사용하면 속도가 느려지기 때문에 이번에도 문제를 빠르게 해결하고 오늘은 간단하게 마무리해야된다.

 

 

문제 9086번

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

 

9086번: 문자열

입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 한 줄에 하나의 문자열이 주어진다. 문자열은 알파벳 A~Z 대문자로 이루어지며 알파벳 사이에 공백은 없으

www.acmicpc.net

 

이 문제는 입력을 받은 후에 테스트 케이스의 개수만큼 for문을 돌려주면 될 것 같다. 그리고 한번 반복을 할 때마다 출력해야되는 것들을 result 변수에 넣어주고 한번에 출력해야겠다.

 

그런데 문자열에서 첫 번째와 마지막 문자를 가져오는 방법이 있을 것 같아서 검색해보니 있었다ㅎㅎ.

[4가지 방법]
1. charAt() 함수
-> 전달된 파라미터의 인덱스에 위치한 글자를 리턴한다.

let first = 배열.charAt(0);  //첫 번째 문자
let last = 배열.charAt(배열.length-1);  //마지막 문자


2. substr() 함수
-> 파라미터로 입력받은 start 인덱스부터 length 길이만큼 문자열을 잘라내어 반환하는 함수이다.
string.substr(start, length)

let first = 배열.substr(0, 1);  //첫 번째 문자
let last = 배열.substr(배열.length-1, 1);  //마지막 문자


3. substring() 함수
-> substr() 함수와 비슷하게 문자열의 일부를 잘라오는 함수이다.
string.substring(start, end)

substr()과 다른 점은 첫번째 파라미터는 잘라내려는 문자열의 시작 인덱스이고,
두번째 파라미터는 잘라내려는 문자열의 마지막 인덱스이다.

let first = 배열.substring(0, 1);  //첫 번째 문자
let last = 배열.substirng(배열.length-1, 배열.length);  //마지막 문자


4. slice() 함수
-> substring() 함수의 사용법과 같다. slice() 함수는 문자열의 일부를 잘라서 반환하는데, 파라미터로는 자르려는 문자열의 시작 인덱스와 끝 인덱스를 전달한다.
string.slice(start, end)

let first = 배열.slice(0, 1);  //첫 번째 문자
let last = 배열.slice(배열.length-1, 배열.length);  //마지막 문자

[참고] https://hianna.tistory.com/338

 

음... 난 charAt()을 사용해야겠다.

 

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

const T = input[0];
let result = [];
for(let i=1;i<=T;i++){
    let a = input[i];
    result += a.charAt(0) + a.charAt(a.length-1) + '\n';
}

console.log(result);

 

 

ㅎㅎ

 

 

 

다른 분은 이런 식으로 shift()를 이용해 배열의 맨 앞에 값을 제거한 후 result에 입력값들을 넣어줬다. 

그리고 forEach()로 배열을 순회하였다.

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split("\n")
const result = Array(Number(input.shift()))
input.forEach((item, idx) => {
    result[idx] = item[0]+item.at(-1)
})

console.log(result.join("\n"))

[참고] https://velog.io/@kwb020312/Baekjoon-9086-%EB%AC%B8%EC%9E%90%EC%97%B4

 

이런 식으로도 작성할 수 있구나.

 

 

다른 풀이도 찾아보니 입력받은 값들을 나처럼 따로 다른 변수에 넣는 것이 아닌 바로 사용하는 분들도 있었다.

 

 

 

 

 

함수를 찾아보느라 생각보다 시간이 많이 걸렸다.

아버지의 데이터를 지키기 위해 여기까지 해야겠다.

 

그래도 내일은 집가니까 와이파이를 쓸 수 있다 ㅎㅎ.

그럼 내일 다시...

 

 

728x90