개발하는 사막여우
개발하는 사막여우
개발하는 사막여우
전체 방문자
오늘
어제
  • All (310)
    • Books (13)
      • 읽기 좋은 코드가 좋은 코드다 (13)
    • Study (6)
      • Blockchain (3)
      • Algorithm (3)
    • Baekjoon (36)
    • Programmers (166)
    • LeetCode (15)
    • Open Source (1)
      • Youtube Popout Player (1)
    • Language (32)
      • Python (9)
      • JS (8)
      • Java (5)
      • HTML (6)
      • CSS (4)
    • Library & Framework (15)
      • React.js (15)
    • IDE (2)
      • IntelliJ (2)
    • Airdrop (9)
    • Tistory (2)
    • etc.. (12)
      • Cozubi (6)
      • lol-chess (0)

블로그 메뉴

  • Github

공지사항

인기 글

태그

  • programmers
  • 백준
  • 코인줍줍
  • 신규 코인 에어드랍
  • 2018 KAKAO BLIND RECRUITMENT
  • 카카오 코딩테스트
  • 프로그래머스 위클리 챌린지
  • Java
  • 프로그래머스
  • Python
  • 클린 코드 작성법
  • 알고리즘문제풀이
  • Cozubi
  • 카카오 공채
  • 코주비
  • 파이썬
  • 코딩테스트연습
  • 읽기 좋은 코드가 좋은 코드다
  • 카카오 알고리즘 문제
  • 클린 코드

최근 댓글

최근 글

티스토리

반응형
hELLO · Designed By 정상우.
개발하는 사막여우

개발하는 사막여우

[리트코드] 967. Numbers With Same Consecutive Differences / Javascript
LeetCode

[리트코드] 967. Numbers With Same Consecutive Differences / Javascript

2021. 9. 30. 18:37
반응형

문제주소 : https://leetcode.com/problems/numbers-with-same-consecutive-differences/

 

Numbers With Same Consecutive Differences - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com


<문제 설명>

더보기

Return all non-negative integers of length n such that the absolute difference between every two consecutive digits is k.

Note that every number in the answer must not have leading zeros. For example, 01 has one leading zero and is invalid.

You may return the answer in any order.

 

Example 1:

Input: n = 3, k = 7 Output: [181,292,707,818,929] Explanation: Note that 070 is not a valid number, because it has leading zeroes.

Example 2:

Input: n = 2, k = 1 Output: [10,12,21,23,32,34,43,45,54,56,65,67,76,78,87,89,98]

Example 3:

Input: n = 2, k = 0 Output: [11,22,33,44,55,66,77,88,99]

Example 4:

Input: n = 2, k = 2 Output: [13,20,24,31,35,42,46,53,57,64,68,75,79,86,97]

 

Constraints:

  • 2 <= n <= 9
  • 0 <= k <= 9

 

<풀이법>

▒ 한줄 개념: dfs ▒ 

dfs, bfs를 사용해 푸는 문제인데, 순열 문제와 비슷한 느낌입니다.

저는 dfs를 사용했고, 풀이방식은 다음과 같습니다.

 

1. 반복문을 통해 하나의 i값으로 된 string을 만들어주고, 이를 사용해 dfs(i)를 실행해줍니다.

  - i = 1, dfs(1)

  - i = 2, dfs(2)

  - i = 3, dfs(3)

2. dfs를 통해 해당 string의 last 값(마지막 인덱스 값)을 가져옵니다.

  - '1' 의 경우 last = 1

  - '13' 의 경우 last = 3

  - '1452' 의 경우 last = 2

3. last - k >= 0 의 경우, last-k를 현재 string에 추가하여 dfs를 재귀 실행해줍니다.

  - k = 3일 때,

  - '4'의 경우 last = 4, dfs(41)

  - '36'의 경우 last = 6, dfs(363)

  - '74'의 경우 last = 4, dfs(741)

4. last + k < 10의 경우, last+k를 현재 string에 추가하여 dfs를 재귀 실행해줍니다.

  - k = 3일 때,

  - '4'의 경우 last = 4, dfs(47)

  - '36'의 경우 last = 6, dfs(369)

  - '74'의 경우 last = 4, dfs(747)

5. 재귀를 반복하다가 만약 cur(현재 string)의 길이가 n이고, cur이 answer에 속해있지 않으면, 추가해줍니다.

 

<코드(Javascript)>

/**
 * @param {number} n
 * @param {number} k
 * @return {number[]}
 */
var numsSameConsecDiff = function(n, k) {
    const answer = [];
    
    const dfs = cur => {
        if(cur.length === n){
            if(answer.indexOf(cur) === -1){
                answer.push(cur);
            }
        }else{
            const last = parseInt(cur[cur.length - 1]);
            if(last - k >= 0){
                dfs(cur+(last-k));
            }
            if(last + k < 10){
                dfs(cur+(last+k));
            }
        } 
    }
    
    for(let i = 1; i < 10; i++){
        dfs(String(i));
    }
    
    return answer;
};

 

 

더 많은 코드 보기(GitHub) : github.com/dwkim-97/CodingTest

 

 

반응형
저작자표시 (새창열림)

'LeetCode' 카테고리의 다른 글

[리트코드] 809. Expressive Words / Javascript  (0) 2021.10.07
[리트코드] 11. Container With Most Water / Javascript  (0) 2021.10.06
[리트코드] 1306. Jump Game III / Javascript  (0) 2021.09.29
[리트코드] 45. Jump Game II / Javascript  (0) 2021.09.28
[리트코드] 336. Palindrome Pairs / Javascript  (0) 2021.09.15
    'LeetCode' 카테고리의 다른 글
    • [리트코드] 809. Expressive Words / Javascript
    • [리트코드] 11. Container With Most Water / Javascript
    • [리트코드] 1306. Jump Game III / Javascript
    • [리트코드] 45. Jump Game II / Javascript
    개발하는 사막여우
    개발하는 사막여우
    개발개발 주저리주저리

    티스토리툴바