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)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
jiho_bae

Go devlog

[프로그래머스] 튜플 - 자바스크립트
DS & Algorithm/programmers

[프로그래머스] 튜플 - 자바스크립트

2021. 6. 19. 14:49

문제

 

코딩테스트 연습 - 튜플

"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

programmers.co.kr

 

풀이

입출력이 위와 같이 주어진다.

 

문제의 주요한 조건은 다음과 같다.

 

튜플은 중복된 원소가 있을 수 있지만, 이 문제에서는 중복되는 원소가 없는 튜플이 주어진다.
튜플 원소에는 정해진 순서가 있으며 개수가 유한하다.

 

위의 조건을 보면
튜플은 [2,1,3,4]로 정해져 있지만, 집합으로서 다양하게 표현할 수 있다.

 

또한 집합 내 원소들의 순서 또한 바뀌어도 상관이 없다.

 

이 조건들을 바탕으로 문제를 풀어보자.

 

풀이 방향

 

입출력이 문자열 s 형태로 주어진다.

 

자바스크립트에서 {{}} 형태는 객체이므로, 우선 문자열 s를 가지고 가공하는 것이 낫다.

그러므로 문자열을 다듬어서 우선 각 집합들을 배열의 원소로서 넣어주면 편할 듯 하다.

 

배열의 각 인덱스에 집합을 넣어줬으면, 집합의 크기 순서대로 정렬한다.
배열 내 집합들을 오름차순으로 정렬해야 "튜플 원소의 정해진 순서"를 구할 수 있다.

 

정답을 위한 배열을 선언하고,
배열 내 집합들을 순회하면서, 집합 내 원소들이 정답 배열에 없다면 추가해준다.

 

이를 바탕으로 코드를 작성한다.

코드

function solution(s) {
  const answer = [];
  s.slice(2, s.length - 2) // 번호 1
    .split("},{")            // 번호 2
    .map((str) => str.split(",").map(Number))    // 번호 3
    .sort((a, b) => a.length - b.length)    // 번호 4
    .forEach((arr) => {    // 번호 5
      arr.forEach((v) => {
        if (!answer.includes(v)) answer.push(v);
      });
    });
  return answer;
}

 

위에서 설명했지만 코드의 수행 절차는 다음과 같다.

 

s = "{{1,2,3},{2,1},{1,2,4,3},{2}}" 라고 생각해보자.

 

번호 수행한 메서드 결과
1 slice "1,2,3},{2,1},{1,2,4,3},{2"
2 split ["1,2,3", "2,1", "1,2,4,3", "2"]
3 map
4 sort
5 forEach 반환값이 없다.

다음의 과정을 거친다.

 

위와 같이 연속된 체인으로 작성할 수 있는 이유는
forEach를 제외한 slice,split,map,sort메서드가 수행 결과를 반환값으로 주기 때문이다.

마지막 forEach에서는 answer 배열에 넣어주는 작업을 하기 때문에 반환값이 필요하지 않다.

 

 

수행 결과를 반환값으로 주는 의미는 아래를 보면 되겠다.

 

s.slice(2, s.length - 2).split("},{") 코드는 slice의 수행 결과
"1,2,3},{2,1},{1,2,4,3},{2".split("},{") 이 되고 split의 수행 결과
["1,2,3", "2,1", "1,2,4,3", "2"]를 반환하기 때문에
반환 값을 이용해 연속적으로 배열의 프로토타입 메서드 map을 사용할 수 있다.

 

저작자표시 (새창열림)

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

[프로그래머스] 파일명 정렬 - 자바스크립트  (0) 2021.06.24
[프로그래머스] 피보나치 수 - 자바스크립트  (0) 2021.06.19
[프로그래머스] 오픈 채팅방 - 자바스크립트  (0) 2021.06.19
[프로그래머스] 소수 찾기 - 자바스크립트  (0) 2021.06.18
[프로그래머스] 괄호 변환 - 자바스크립트  (0) 2021.06.18
    'DS & Algorithm/programmers' 카테고리의 다른 글
    • [프로그래머스] 파일명 정렬 - 자바스크립트
    • [프로그래머스] 피보나치 수 - 자바스크립트
    • [프로그래머스] 오픈 채팅방 - 자바스크립트
    • [프로그래머스] 소수 찾기 - 자바스크립트
    jiho_bae
    jiho_bae
    하루에 한 걸음씩

    티스토리툴바