GitHub ID : soohyun-dev
윤수현의 개발 공간
GitHub ID : soohyun-dev
전체 방문자
오늘
어제
  • 분류 전체보기 (918)
    • 성장기록 (49)
      • 성장기록 (3)
      • 우아한테크코스 (16)
      • 프로젝트 (15)
      • TIL (14)
      • 테오의 스프린트 (1)
    • 프로그래밍언어 (88)
      • C언어 (14)
      • HTML\CSS (12)
      • JavaScript (7)
      • React (23)
      • Python (11)
      • JAVA (14)
      • TypeScript (6)
    • 알고리즘 공부 (736)
      • 코드업 - 파이썬 (108)
      • 백준 - 파이썬 (468)
      • 백준 - 자바스크립트 (125)
      • 프로그래머스 - 파이썬 (1)
      • 프로그래머스 - 자바스크립트 (34)
    • 책 리뷰 (9)
      • 프로그래밍 (3)
      • 독서 (6)
    • 전자기기 (1)
    • 일상, 일기 (18)
    • 기술 세미나 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코딩테스트
  • 영어독해
  • 코딩
  • 코드업
  • 파이썬
  • PYTHON
  • 자바스크립트
  • 프로그래머스풀이
  • 백준
  • 백준파이썬
  • 프로그래머스
  • 코드업파이썬
  • 독해
  • 프로그래머스자바스크립트
  • 영어
  • 프론트엔드
  • 코테
  • 백준풀이
  • javascript
  • 프로그래밍언어

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
GitHub ID : soohyun-dev

윤수현의 개발 공간

백준/ Silver 3 문제 , 백준 Node.js 자바스크립트 9342 , 염색체
알고리즘 공부/백준 - 자바스크립트

백준/ Silver 3 문제 , 백준 Node.js 자바스크립트 9342 , 염색체

2022. 10. 30. 10:38

백준/ Silver 3 문제 , 백준 Node.js 자바스크립트 9342 , 염색체

 

 

 

✔️Check Point !   ( 해당사항 ✓체크 )

1. 막힘 없이 수월하게 풀린 문제인가?

2. 1시간이내로 풀렸던 문제인가?

3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?

4. 시간을 써도 도무지 풀 수 없는 문제인가?

5. 솔루션을 찾아봤는가?

-------------------------------------------------------------------------------------------

난이도 체감 🧑‍💻
1. 최상
2. 상
3. 중
4. 하


이해도 🙆‍♂️
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함


덧붙일 말 🏷️
규칙에 부합하는 단어는 최소 세단어 이상 최대 5단어 이하이다. 이거만으로도 많이 가려낼수 있음.

 

문제 출처 🏠

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

 

9342번: 염색체

상근이는 생명과학 연구소에서 염색체가 특정한 패턴인지를 확인하는 일을 하고 있다. 염색체는 알파벳 대문자 (A, B, C, ..., Z)로만 이루어진 문자열이다. 상근이는 각 염색체가 다음과 같은 규칙

www.acmicpc.net

 

 

 

요구사항 📋

문자열이 규칙을 만족하는지 확인해라.
1. 문자열은 {A, B, C, D, E, F} 중 0개 또는 1개로 시작해야 한다.
2. 그 다음에는 A가 하나 또는 그 이상 있어야 한다.
3. 그 다음에는 F가 하나 또는 그 이상 있어야 한다.
4. 그 다음에는 C가 하나 또는 그 이상 있어야 한다.
5. 그 다음에는 {A, B, C, D, E, F} 중 0개 또는 1개가 있으며, 더 이상의 문자는 없어야 한다.

 

규칙에 부합하는 단어라면 'infected!' 출력, 아니라면 'Good' 출력.

 

 

 

해결 전략 📝

문자열이 입력되면, 스택에 차례대로 담는다.이때, 연속으로 같은단어라면 담지 않는다.
정리된 단어가 규칙에 부합하는지 확인.

 

2번,3번,4번 규칙 때문에 'AFC'라는 단어는 무조건 포함되어있어야한다.

 

기능 목록 📲

1. 연속되는 단어들을 정리 => buildStack 함수
2. 규칙에 부합하는지 확인. => checkRule 함수

 

 

예외사항 ⚠️

1. 정리한 최종 단어가 3글자 이하로 정리되는 경우

2. 정리한 최종 단어나, 스택의 길이가 5가 넘어가는 경우 

 

 

정답 💯

 

const input = require("fs")
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .split("\n");

const t = input.shift();
let [...test] = input;
test = test.map((v) => v.trim());

function solution(T, testCase) {
  function buildStack(Str) {
    let stack = [];
    for (let j = 0; j < Str.length; j++) {
      if (stack[stack.length - 1] !== Str[j]) {
        stack.push(Str[j]);
      }
      if (stack.length > 5) return false;
    }
    if (stack.length < 3) return false;
    return checkRule(stack.join(""));
  }

  function checkRule(result) {
    const alpha = ["A", "B", "C", "D", "E", "F"];
    if (result.length === 3) {
      if (result !== "AFC") return false;
      else return true;
    } else if (result.length === 4) {
      for (let i = 0; i < alpha.length; i++) {
        if (alpha[i] + "AFC" === result) return true;
        if ("AFC" + alpha[i] === result) return true;
      }
      return false;
    } else if (result.length === 5) {
      for (let i = 0; i < alpha.length; i++) {
        for (let j = 0; j < alpha.length; j++) {
          if (alpha[i] + "AFC" + alpha[j] === result) return true;
        }
      }
      return false;
    }
    return false;
  }

  for (let i = 0; i < T; i++) {
    let str = testCase[i].split("");
    let result = buildStack(str);
    if (result) {
      console.log("Infected!");
    } else {
      console.log("Good");
    }
  }
}

solution(Number(t), test);

 

 

 

느낀점 🧑‍💻

각 기능을 좀 나눠서 함수로 표현해볼려고 노력해봤다. 조금 더 가독성이 높아지지 않았나 싶다.

 

반응형

'알고리즘 공부 > 백준 - 자바스크립트' 카테고리의 다른 글

백준/ Gold 3 문제 , 백준 Node.js 자바스크립트 1005 , ACM Craft [위상정렬, DP]  (0) 2022.11.01
백준/ Gold 3 문제 , 백준 Node.js 자바스크립트 2252 , 줄 세우기 [위상 정렬]  (0) 2022.11.01
백준/ Gold 4 문제 , 백준 Node.js 자바스크립트 17928 , 오큰수  (0) 2022.10.29
백준/ Gold 5 문제 , 백준 Node.js 자바스크립트 1068 , 트리  (0) 2022.10.27
백준/ Silver 1 문제 , 백준 Node.js 자바스크립트 14675 , 단절점과 단절선  (0) 2022.10.27
    '알고리즘 공부/백준 - 자바스크립트' 카테고리의 다른 글
    • 백준/ Gold 3 문제 , 백준 Node.js 자바스크립트 1005 , ACM Craft [위상정렬, DP]
    • 백준/ Gold 3 문제 , 백준 Node.js 자바스크립트 2252 , 줄 세우기 [위상 정렬]
    • 백준/ Gold 4 문제 , 백준 Node.js 자바스크립트 17928 , 오큰수
    • 백준/ Gold 5 문제 , 백준 Node.js 자바스크립트 1068 , 트리
    GitHub ID : soohyun-dev
    GitHub ID : soohyun-dev
    환영합니다!😊 이곳은 저의 개발에 관한 내용들을 정리하는 공간입니다. 알고리즘 풀이에도 관심이 많아요. 좋은 하루 되세요~! github : soohyun_dev

    티스토리툴바