🖥 문제 '(' 와 ')' 로만 이루어진 문자열 w가 "균형잡힌 괄호 문자열" 이라면 다음과 같은 과정을 통해 "올바른 괄호 문자열"로 변환할 수 있습니다. 입력이 빈 문자열인 경우, 빈 문자열을 반환합니다. 문자열 w를 두 "균형잡힌 괄호 문자열" u, v로 분리합니다. 단, u는 "균형잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 하며, v는 빈 문자열이 될 수 있습니다. 문자열 u가 "올바른 괄호 문자열" 이라면 문자열 v에 대해 1단계부터 다시 수행합니다. 3-1. 수행한 결과 문자열을 u에 이어 붙인 후 반환합니다. 문자열 u가 "올바른 괄호 문자열"이 아니라면 아래 과정을 수행합니다. 4-1. 빈 문자열에 첫 번째 문자로 '('를 붙입니다. 4-2. 문자열 v에 대해 1단계부터 재귀적으로 수..
🖥 문제 트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다. solution 함수의 매개변수로 다리 길이 bridge_length, 다리가 견딜 수 있는 무게 weight, 트럭 별 무게 truck_weights가 주어집니다. 이때 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 return 하도록 solution 함수를 완성하세요. 🤔 풀이 방법 변수 truck: Int : 대기 트럭이 담긴 큐 bridge: [Int] : 다리 길이의 배열 arrived: [Int] : 다리를 지난 트럭 we..
🖥 문제 문제 설명 피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2)가 적용되는 수입니다. 예를 들어 F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) = 2 + 3 = 5 와 같이 이어집니다. 2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요. 제한 사항 n은 1 이상, 100000 이하인 자연수입니다. 🤔 풀이 방법 var fibo: [Int] = Array(repeating: 0, count: n + ..
🖥 문제 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요. 🤔 풀이 방법 arr[0]과 arr[1]의 최대공약수를 유클리드 호제법을 이용하여 구한다. 1번에서 구한 최대공약수를 이용하여 최소공배수를 구한다. 2번에서 구한 최소공배수를 이용하여 arr[2]와의 최대공약수를 유클리드 호제법을 이용하여 구한다. 3번에서 구한 최대공약수를 이용하여 최소공배수..
🖥 문제 압축할 문자열 s가 매개변수로 주어질 때, 위에 설명한 방법으로 1개 이상 단위로 문자열을 잘라 압축하여 표현한 문자열 중 가장 짧은 것의 길이를 return 하도록 solution 함수를 완성해주세요. 🤔 풀이 방법 변수 s: [String] : 압축할 문자열 compressedS: [String] : 압축된 문자열 중 가장 짧은 문자열 start: Int : 비교의 기준이 되는 문자열의 시작 인덱스 current: Int : 비교중인 인덱스 num: Int : 압축이 가능한 개수 tmp: [string] : 압축된 문자열 for i in 1...s.count/2 + 1 {} 1개 ~ s.count/2개의 문자열 단위로 압축하기 위하여 반복한다. while current+i-1 < s.coun..
🖥 문제 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다. 🤔 풀이 방법 strings[i] = "\(str[str.index(str.startIndex, offsetBy: n)])\(str)" 문자열의 인덱스 n번째 글자를 문자열 맨 앞에 붙인다. strings.sort() 첫번째 글자를 기준으로 오름차순 정렬을 한다. 맨 앞에 문자를 제외한 문자열을 answer에 append한다. let start = str.index(str.startIndex, of..
🖥 문제 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요. 🤔 풀이 방법 var possible = Array(repeating: 1, count: n) n명의 학생이 모두 체육복을 하나씩 가져왔다고 가정하고 배열을 1로 초기화한다. 도난당한 학생의 체육복을 -1해 주고 여벌 체육복이 있는 학생들의 체육복을 +1 해준다. for i in lost { possible[i - 1] -= 1 } for i in reserve { possible[i - 1] += 1 } if i != 0 && pos..
🖥 문제 스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다. 이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다. 맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다. 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다. 왼쪽 열의 3개의 숫자 1, 4, 7을 입력할 때는 왼손 엄지손가락을 사용합니다. 오른쪽 열의 3개의 숫자 3, 6, 9를 입력할 때는 오른손 엄지손가락을 사용합니다. 가운데 열의 4개의 숫자 2, 5, 8, 0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락을 사용합니다. 4-..
- Total
- Today
- Yesterday
- 깊이 우선 탐색
- 프로그래머스
- java
- Firebase
- abs()
- 별졈
- programmers
- compactMap
- 최대공약수
- sql
- map
- iTunes Search API
- DFS
- TIL
- 다리를 지나는 트럭
- ternary
- Algorithm
- Kakao
- 최소공배수
- Baekjoon
- 에로토스테네스의 체
- 달력
- 유클리드 호제법
- mysql
- calendar
- SWIFT
- IOS
- UISearchController
- BOJ
- Git
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |