Company
교육 철학

코딩테스트 실전문제 (백트래킹) (Coding Test: Backtracking)

전화번호의 문자 조합 (Solution)

2-9 범위의 숫자로 이루어진 문자열이 주어질 때, 해당 숫자 조합이 나타낼 수 있는 모든 가능한 문자 조합을 반환하세요. 반환 순서는 아무 순서나 상관없습니다.
아래는 전화 키패드에서 숫자에 대응되는 문자 매핑입니다. (참고로 1은 어떤 문자에도 매핑되지 않습니다.)
예시 1:
Input: digits = "23" Output: ["ad","ae","af","bd","be","bf","cd","ce","cf"]
Plain Text
복사
예시 2:
Input: digits = "2" Output: ["a","b","c"]
Plain Text
복사
제약 조건:
1 <= digits.length <= 4
digits[i]['2', '9'] 범위의 숫자입니다.

괄호 생성 (Solution)

n쌍의 괄호가 주어졌을 때, 올바르게 짝지어진 괄호 문자열모든 조합을 생성하는 함수를 작성하세요.
예시 1:
Input: n = 3 Output: ["((()))","(()())","(())()","()(())","()()()"]
Plain Text
복사
예시 2:
Input: n = 1 Output: ["()"]
Plain Text
복사
제약 조건:
1 <= n <= 8

순열 (Solution)

서로 다른 정수로 이루어진 배열 nums가 주어질 때, 가능한 모든 순열(permutations)을 반환하세요. 반환 순서는 아무 순서나 상관없습니다.
예시 1:
Input: nums = [1,2,3] Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
Plain Text
복사
예시 2:
Input: nums = [0,1] Output: [[0,1],[1,0]]
Plain Text
복사
예시 3:
Input: nums = [1] Output: [[1]]
Plain Text
복사
제약 조건:
1 <= nums.length <= 6
-10 <= nums[i] <= 10
nums의 모든 정수는 서로 다릅니다.

부분집합 (Solution)

서로 다른 원소로 이루어진 정수 배열 nums가 주어질 때, 가능한 모든 부분집합(멱집합, power set) 을 반환하세요.
해답에는 중복된 부분집합이 포함되면 안 됩니다. 반환 순서는 아무 순서나 상관없습니다.
예시 1:
Input: nums = [1,2,3] Output: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
Plain Text
복사
예시 2:
Input: nums = [0] Output: [[],[0]]
Plain Text
복사
제약 조건:
1 <= nums.length <= 10
-10 <= nums[i] <= 10
nums의 모든 숫자는 서로 다릅니다.

단어 검색 (Solution)

m x n 크기의 문자 격자 board와 문자열 word가 주어질 때, word가 격자 안에 존재하면 true를 반환하세요.
단어는 상하좌우로 인접한 칸을 연속해서 이동하며 만들 수 있습니다. 같은 칸은 한 번만 사용할 수 있습니다.
예시 1:
Input: board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED" Output: true
Plain Text
복사
예시 2:
Input: board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE" Output: true
Plain Text
복사
예시 3:
Input: board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB" Output: false
Plain Text
복사
제약 조건:
m == board.length
n == board[i].length
1 <= m, n <= 6
1 <= word.length <= 15
boardword는 영문 대소문자로만 구성됩니다.
추가 질문: 더 큰 board에서도 빠르게 동작하도록, 가지치기(pruning)를 이용한 탐색 최적화를 적용할 수 있나요?