문제 : https://www.acmicpc.net/problem/1316
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
Sol )
- 문자가 연속적으로 입력된다는 뜻은, 한 번 이상 문자 입력 후 다른 문자가 입력된 다음 다시 나오지 않는다는 뜻
- 길이 26의 cnt 배열 (cnt_arr) false로 초기화
- result = 0
- 단어 입력 횟수만큼 순회하면서 반복문 안에서 flag (그룹 단어인지 여부 확인용 변수)로 활용할 변수 check_bool 선언
- 문자열을 순회하면서 cnt 배열의 문자 아스키코드 - 'a' 아스키코드 인덱스 추출
- 만약 인덱스가 바뀌면 이전 인덱스 값 true로 변경
- cnt [인덱스] 값이 true라면 1번 조건을 위배하므로 반복을 종료하고 flag( 코드에서 check_bool ) 값에 체크해준 뒤 다음 단어에 대해 탐색
- 모든 탐색 종료시까지 조건을 충족했다면 (flag = check_bool = true 라면) result += 1
- 최종 result 출력
소스코드 )
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');
let result = 0;
let cnt_arr;
let idx, check_bool, prev_idx;
for (let i = 1 ; i<input.length -1 ; i++){
cnt_arr = new Array(26).fill(false);
check_bool = true;
prev_idx = input[i][0].charCodeAt(0) - "a".charCodeAt(0);
for (let j = 1 ; j<input[i].length ; j++){
idx = input[i][j].charCodeAt(0) - "a".charCodeAt(0);
if (cnt_arr[idx]){
check_bool = false;
break;
}
if (prev_idx !== idx){
cnt_arr[prev_idx] = true;
}
prev_idx = idx;
}
if (check_bool){
result++;
}
}
console.log(result);
'Problem Solving > boj.kr (JS)' 카테고리의 다른 글
[BOJ / 자바스크립트] 2292 : 벌집 (0) | 2022.03.13 |
---|---|
[BOJ / 자바스크립트] 1712 : 손익분기점 (0) | 2022.03.12 |
[BOJ / 자바스크립트] 2941 : 크로아티아 알파벳 (0) | 2022.02.26 |
[BOJ / 자바스크립트] 5622 : 다이얼 (0) | 2022.02.26 |
[BOJ / 자바스크립트] 1152 : 단어의 개수 (0) | 2022.02.26 |
댓글