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)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
jiho_bae
DS & Algorithm/programmers

[프로그래머스] 괄호 변환 - 자바스크립트

[프로그래머스] 괄호 변환 - 자바스크립트
DS & Algorithm/programmers

[프로그래머스] 괄호 변환 - 자바스크립트

2021. 6. 18. 21:23

문제

 

코딩테스트 연습 - 괄호 변환

카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를

programmers.co.kr

 

풀이

문제가 상당히 길지만 당황하지 말고 천천히 읽어보면 의외로 쉽게 풀리기도 한다.

핵심 키워드는 다음과 같다.

 

균형잡힌 괄호 문자열 : 두 괄호 "("  ")"의 개수가 같다.
올바른 괄호 문자열 : 균형잡힌 괄호 문자열이면서, "("  ")" 의 순서 짝이 맞는 경우이다.

 

임의의 "균형잡힌 괄호 문자열" p를 입력받아 "올바른 괄호 문자열"로 바꿔서 출력하는 문제이다.

 

풀이 방향

문제를 보면, 임의의 p를 입력받으나 이는 이미 "균형잡힌 괄호 문자열"임이 명시되어 있다.
문제에서 등장하는 w가 "균형잡힌 괄호 문자열"이므로 임의의 입력 p를 미리 w로 취급해도 된다.

 

문자열 w로부터 시작되는 알고리즘은 다음과 같다.

 

 

 

1. w가 비었으면 빈 문자열을 반환한다.

 

2. 문자열 w를 순회하면서 "균형잡힌 문자열"까지의 인덱스 i를 찾고, 0~i번째까지를 문자열 u, i~끝까지를 문자열 v로 분리한다.
slice 메서드를 이용할 것인데, slice 메서드의 인자가 문자열의 범위를 벗어나면 빈 문자열이 반환되므로 v는 빈 문자열이 될 수도 있다.

 

3 문자열 u가 "올바른 괄호 문자열" 이면 3-1, 아니라면 3-2를 수행한다.

 

3-1 재귀함수에 인자 w로 문자열 v를 넣은 결과를 문자열u 뒤에 이어 붙여 반환한다.

 

3-2 아래의 과정을 수행한다.
재귀함수에 인자 w로 문자열 v를 넣어 결과를 반환받는다.
문자열 u의 처음, 마지막 문자를 제거하고, 나머지 문자열에서 모든 괄호를 반대방향으로 바꾼다.
"("  solution(v)  ")"  변화된 문자열 u 을 이어 붙여 반환한다.

 

다음의 명령을 수행하도록 코드를 작성하면 된다.

 

코드

function solution(w) {
  if (w === "") return ""; // w가 빈 문자열이면 빈 문자열을 반환한다.
  let u, v;
  let cnt = 0;

  const wLen = w.length;
  for (let i = 0; i < wLen; i++) {
    w[i] === "(" ? cnt++ : cnt--;
    if (cnt === 0) {
      u = w.slice(0, i + 1);
      v = w.slice(i + 1);
      break;
    }
  } // w에서 균형잡힌 문자열까지 문자열 u로 선언하고, 나머지를 v로 선언한다.

  const uLen = u.length;
  for (let i = 0; i < uLen; i++) {
    u[i] === "(" ? cnt++ : cnt--;
    if (cnt < 0) { // cnt < 0 이면 올바른 문자열이 아니므로 3-2를 수행한다.
      let str = "";
      str += `(${solution(v)})`;
      for (let j = 1; j < uLen - 1; j++) {
        u[j] === "(" ? (str += ")") : (str += "(");
      }
      return str;
    }
  }

  return u + solution(v); // 이 3-1의 리턴이 수행되려면 u가 올바른 문자열이어야 한다.
}

 

저작자표시 (새창열림)

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

[프로그래머스] 오픈 채팅방 - 자바스크립트  (0) 2021.06.19
[프로그래머스] 소수 찾기 - 자바스크립트  (0) 2021.06.18
[프로그래머스] 게임 맵 최단거리 - 자바스크립트  (0) 2021.06.18
[프로그래머스] 땅따먹기 - 자바스크립트  (0) 2021.06.18
[프로그래머스] 다리를 지나는 트럭 - 자바스크립트  (0) 2021.04.19
  • 문제
  •  
  • 풀이
  •  
  • 코드
'DS & Algorithm/programmers' 카테고리의 다른 글
  • [프로그래머스] 오픈 채팅방 - 자바스크립트
  • [프로그래머스] 소수 찾기 - 자바스크립트
  • [프로그래머스] 게임 맵 최단거리 - 자바스크립트
  • [프로그래머스] 땅따먹기 - 자바스크립트
jiho_bae
jiho_bae
하루에 한 걸음씩

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.