jiho_bae
Go devlog
jiho_bae
전체 방문자
오늘
어제
  • 분류 전체보기 (158)
    • JavaScript (38)
      • theory (34)
      • vanilla (4)
    • HTML & CSS (2)
    • Browser (3)
    • CS (6)
      • linux (1)
      • shell (2)
      • compiler (2)
    • DS & Algorithm (87)
      • theory (5)
      • basic (7)
      • programmers (30)
      • baekjoon (45)
    • Design Pattern (2)
    • Error (4)
    • Git & Github (4)
    • Tools (1)
    • 부트캠프 (4)
    • Small Tips (2)
    • Java (3)
    • test (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 25632 소수 부르기 게임
  • 카카오 코딩테스트 양궁대회 nodeJS
  • 백준 자바스크립트 입력 템플릿
  • 계수정렬 자바스크립트
  • 자바스크립트 비동기 마이크로 태스크 큐와 렌더링 과정
  • javascript use strict
  • 리코쳇 로봇 javascript
  • 프로그래머스 숫자카드나누기 javascript
  • 자바스크립트 커링
  • 깃 이전 커밋에서 새 브랜치 만들기
  • 자바스크립트 배열의 특수함
  • 외벽 점검 javascript
  • 백준 17406 nodeJS
  • JavaScript
  • 덧칠하기 javascript
  • fetch 취소하기
  • 억억단을 외우자 javascript
  • 자바스크립트 채팅방 스크롤
  • 가사 검색 자바스크립트
  • 리액트 프로젝트 디버깅하기
  • 자바스크립트 이벤트 위임
  • 퀵정렬 자바스크립트
  • 자바스크립트 sort는 왜 그모양일까
  • safari invalid date error
  • 자바스크립트 모듈 시스템
  • safari Date format NaN
  • 병합정렬 자바스크립트
  • 대충만든자판 javascript
  • 13460 javascript nodejs
  • 1753 최단경로 javascript

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
jiho_bae

Go devlog

DS & Algorithm/baekjoon

[백준] 1316번 그룹 단어 체커 - JavaScript(NodeJS)

2021. 7. 2. 17:08

문제

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때

www.acmicpc.net

 

코드

function sol(input) {
  let answer = 0;
  const n = +input[0];
  for (let i = 1; i <= n; i++) {
    const word = input[i];
    let prevWord = word[0];
    let flag = 1;
    for (let j = 1; j < word.length; j++) {
      if (prevWord === word[j]) continue;
      if (word.slice(j).includes(prevWord)) {
        flag = 0;
        break;
      } else prevWord = word[j];
    }
    if (flag) answer++;
  }
  return answer;
}

const input = [];
require("readline")
  .createInterface(process.stdin, process.stdout)
  .on("line", (line) => {
    input.push(line);
  })
  .on("close", () => {
    console.log(sol(input));
    process.exit();
  });

 

풀이

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다.

 

ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나므로 그룹단어이다.
aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.

 

단어 N개가 주어졌을 때 그룹 단어의 개수를 출력하자.

 

 

절차는 다음과 같다.

 

단어의 알파벳을 처음부터 순회한다.

 

1. 알파벳이 바뀌는 시점에서 남은 단어에서 중복된 알파벳이 존재하는지 확인한다.
2. 남은 단어에 중복된 알파벳이 있으면 그룹 단어가 아니다.
남은 단어에 중복된 알파벳이 없다면, 바뀐 알파벳을 기준으로 단어를 계속 순회하며 1,2번 단계를 반복한다.

 

단어의 끝까지 알파벳 중복이 발견되지 않는다면 그룹 단어의 개수를 하나 추가할 수 있다.

 

예를 들어 설명하면 다음과 같다.

 

aabbbccb 의 경우

 

a->b로 바뀌는 시점에서 bbbccb에서 a가 존재하는지 판단한다.
존재하지 않으므로 다음 알파벳 b로 넘어간다.
b->c로 바뀌는 시점에서 ccb에서 b가 존재하는지 판단한다.
남은 단어 ccb에 b가존재하므로 그룹 단어가 아니다. 바로 단어의 알파벳 순회를 종료한다.

 

aabbcc의 경우

 

a->b로 바뀌는 시점에서 bbcc에 a가 존재하지 않으므로 다음 알파벳 b로 넘어간다.
b->c로 바뀌는 시점에서 cc에 b가 존재하지 않으므로 다음 알파벳 c로 넘어간다.
c에서 더이상 바뀌는 알파벳이 없으므로 그룹 단어의 개수를 하나 추가할 수 있다.

저작자표시 (새창열림)

'DS & Algorithm > baekjoon' 카테고리의 다른 글

[백준] 2231번 분해합 - JavaScript(NodeJS)  (0) 2021.07.16
[백준] 3055번 탈출 - JavaScript(NodeJS)  (0) 2021.07.07
[백준] 1037번 약수 - JavaScript(NodeJS)  (0) 2021.07.01
[백준] 1152번 단어의 개수 - JavaScript(NodeJS)  (0) 2021.07.01
[백준] 15990번 1, 2, 3 더하기 5 - JavaScript(NodeJS)  (0) 2021.06.09
    'DS & Algorithm/baekjoon' 카테고리의 다른 글
    • [백준] 2231번 분해합 - JavaScript(NodeJS)
    • [백준] 3055번 탈출 - JavaScript(NodeJS)
    • [백준] 1037번 약수 - JavaScript(NodeJS)
    • [백준] 1152번 단어의 개수 - JavaScript(NodeJS)
    jiho_bae
    jiho_bae
    하루에 한 걸음씩

    티스토리툴바