백준
백준 1316번 "그룹 단체 체커"
itowayup
2024. 4. 13. 22:29
백준 1316번
- 이 문제는 문자열을 배열화 하는 법에대해 공부할 수 있었던 문제였다. 그리고 이중배열을 다루는데 좀더 능숙해질 수 있었다.
https://www.acmicpc.net/problem/1316
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
처음이자 정답으로 제출한 코드
const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
//입력받은값들을 배열로서 저장
let words = [];
for(let i = 0; i < input.length; i++){
words.push(input[i].trim());
}
let result = 0;
for(let i = 1; i < words.length; i++){
//받은 문자를 배열화
let check = [...words[i]];
let linked = true;
//이중배열을 통해 이어서 같은 알파벳이 나오면 same true 유지
//다른 알파벳이 나오면 false로 전환
//이후 다시 같은 알파벳이 나오면 linked를 false로 변경하여 링크단어가 아님을 표시
for(let j = 0; j < check.length;j++){
let same = true;
for(let k = j+1; k < check.length; k++){
if(check[j] != check[k]){
same = false;
}
if(!same){
if(check[j] == check[k]){
linked = false;
}
}
}
}
if(linked){
result++;
}
}
console.log(result);
이 문제를 처음 봤을떄 문자를 배열화하여 이중배열로 확인하면 금방 풀리겠다 라고 생각했다.
처음의 생각했던 방식은 아래와 같다.
happy 라는 입력값이 있을경우 이를 배열화 하여
[ 'h', 'a', 'p', 'p', 'y'] 로 변환하고 이중배열을 통하여 이어지는 알파벳들을 검사한다.
i번째 인덱스가 h일때 j번째 인덱스는 appy를 검사하고
i번째 인덱스가 a일때 j번째 인덱스는 ppy를 검사한다.
이때 same 이라는 boolean 값을 하나 만들어 반복문이 실행될때 이 값을 true로 두고
i번째 인덱스값과 j번째 인덱스가 달라질경우 해당 값을 false로 변경한다.
이떄 same값이 false 일때부터 i번째 인덱스와 j번째 인덱스가 같을경우 linked 값을 false로 변경하여 링크단어가 아님을 표시한다.
마지막으로 반복문이 끝날때 linked 값이 true이면 result 값에 1을 더하고 아닐경우 그냥 패스한다.
해당 문제를 위와 같은 과정으로 풀이하였고 다행히 한번에 통과할 수 있었다.