본문 바로가기

백준/JavaScript

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

728x90

 

 

 

 

드디어 집에 왔다...

피곤한걸...?

 

 

 

 

문제 11654번

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

 

11654번: 아스키 코드

알파벳 소문자, 대문자, 숫자 0-9중 하나가 주어졌을 때, 주어진 글자의 아스키 코드값을 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

여기서 아스키란, 미국 국립 표준 협회에서 표준화한 정보교환용 7비트 부호체계를 뜻한다.

 

문자를 아스키코드로 변환하기 위해서는 'String.charCodeAt(index)'를 사용하면 된다. 이것을 사용하면 index에 해당하는 문자의 유니코드 값을 리턴해준다.

 

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

console.log(input.charCodeAt());

 

 

 

 

 

 

문제 11720번

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

 

11720번: 숫자의 합

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

www.acmicpc.net

 

이 문제는 입력받은 후에 for문을 이용하여 문자를 하나씩 나눠서 더해주면 될 것 같다.

 

const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require('fs').readFileSync(readFileSyncAdress).toString().split('\n');
const N = Number(input[0]);
let result = 0;
for(let i=0;i<N;i++){
    result += Number(input[1].split('')[i]);
}
console.log(result);

 

 

처음에 result를 초기화 안 해줬더니 undefined가 앞에 포함되었다. 그리고 '' 이런 식으로 초기화하니 문자로 인식하고 숫자를 더하는 게 아니라 그대로 54321 이런 식으로 출력되었다. 그래서 0으로 초기화하니 다시 잘 더해졌다.

 

다른 풀이도 찾아보니 for문을 사용할 필요없이 누적시켜 주는데 특화되어 있는 reduce() 함수를 사용하여 값을 누적시켜 준 분도 있었다.

 

 

 

 

 

문제 10809번

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

 

10809번: 알파벳 찾기

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출

www.acmicpc.net

 

음... 이 문제는 해당 단어에 알파벳이 있으면 그 알파벳 위치에 해당 인덱스를 출력해주면된다...

그런데 어떤 식으로 작성해야 되는지 모르겠어서 다른 풀이로 먼저 공부해야겠다.

 

이 분은 각각의 알파벳이 처음 등장하는 위치를 담아둘 곳으로 list를 만들고 for문을 이용하여 i의 시작값을 'a'를 아스키코드로 변환한 값으로 정했다고 한다. 이렇게 숫자로 바꿔서 반복문을 돌린 것 같다.

그리고 String.fromCharCode(i) 함수를 통해 아스키코드 상태인 i 값을 다시 문자열로 바꿔주고 input.indexOf()로 감싸 각각의 문자열이 처음 등장하는 index값을 list에 넣어줬다고 한다. 찾으려는 문자가 없는 경우 indexOf()로 -1이 추가된다.

 

... 어렵네...

 

그럼... 이제 내가 다시 작성해 봐야겠다.

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

let list = [];
for(let i='a'.charCodeAt();i<='z'.charCodeAt();i++){
    list.push(input.indexOf(String.fromCharCode(i)));
}

console.log(list.join(' '));

 

 

ㅎㅎ 됐다!

 

 

[참고] https://velog.io/@gkswn45/JavaScript-%EB%B0%B1%EC%A4%80-10809-%EC%95%8C%ED%8C%8C%EB%B2%B3%EC%B0%BE%EA%B8%B0

 

 

 

 

728x90