본문 바로가기

programmers44

SwiftUI: [1차] 뉴스 클러스터링 프로그래머스 [1차] 뉴스 클러스터링 각 문자열을 2글자 단위로 끊어서 합집합과 공집합을 통해 자카드 유사도를 구하는 문제입니다. Set의 집합 관련 메소드를 사용하면 결과 값이 달라서 순회로 구현했습니다. func solution(_ str1:String, _ str2:String) -> Int { let str1 = str1.lowercased().reduce(into: [" "]) { $0.append("\\($0.last!.last!)\\($1)") }.filter { $0.first!.isLetter && $0.last!.isLetter } var str2 = str2.lowercased().reduce(into: [" "]) { .. 2024. 4. 4.
SwiftUI: [1차] 캐시 프로그래머스 [1차] 캐시 주어진 배열에 LRU 캐시 교체 알고리즘을 사용해서 소요 시간을 구하는 문제입니다. 문자열이 대소문자 구분 없이 들어있고, 캐시 사이즈는 0인 것을 주의하면 됩니다. func solution(_ cacheSize:Int, _ cities:[String]) -> Int { var cache: [String] = [] return cities.map({ $0.lowercased() }).reduce(into: 0) { time, city in if cache.contains(city) { cache = cache.filter({ $0 != city }) time += 1 } else { .. 2024. 4. 3.
SwiftUI: 의상 프로그래머스 의상 주어진 옷과 부위 배열에서 도출 가능한 경우의 수를 구하는 문제 아무 것도 입지 않는 경우를 제외하고 아래 주석과 같은 형태가 되어서 n * m * … 으로 구현 func solution(_ clothes:[[String]]) -> Int { clothes.reduce(into: [:], { $0[$1.last!, default: 0] += 1 }).values.reduce(into: 1, { $0 *= ($1 + 1) }) - 1}// clothes return// [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]] 5// [["crow_mas.. 2024. 4. 2.
SwiftUI: H-Index 프로그래머스 H-Index 주어진 인용수를 통해 H-Index를 구하는 문제연습문제 문제집의 문제는 통번역체라 문제 해석이 더 오래 걸려서 대충 힌트만 보고 구현 func solution(_ citations:[Int]) -> Int { for i in 0...citations.count { if citations.filter({ $0 > i }).count 2024. 4. 2.
SwiftUI: 가장 큰 수 프로그래머스 가장 큰 수 주어진 배열을 이어 붙혔을 때 가장 큰 수를 구하는 문제 “000” 배열 예외 처리하고, 이외는 “1” + “2”와 “2” + “1” 중 큰 순으로 정렬해서 구현 func solution(_ numbers:[Int]) -> String { let numbers: [String] = numbers.map({ String($0) }).sorted(by: { ($0 + $1) >= ($1 + $0) }) return numbers[0] == "0" ? "0" : numbers.joined()}// numbers return// [6, 10, 2] "6210"// [3, 30, 34, 5, 9] "9534330" 2024. 3. 26.
SwiftUI: n^2 배열 자르기 프로그래머스 n^2 배열 자르기 [1], [[1 2] [2 2]], [[1 2 3] [2 2 3] [3 3 3]] … 처럼 1씩 증가하는 n * n 배열을 1차원 배열로 변환 했을 때 원하는 구간을 반환하는 문제 n = 3 일 때 [1 2 3 2 2 3 3 3 3]로 left부터 right까지 몫과 나머지를 통해 구현 func solution(_ n:Int, _ left:Int64, _ right:Int64) -> [Int] { (left...right).map { Int(max($0 / Int64(n) + 1, $0 % Int64(n) + 1)) }}// n left right result// 3 2 5 [3,2,2,3]// 4 .. 2024. 3. 25.
SwiftUI: 할인 행사 프로그래머스 할인 행사 원하는 목록을 할인 목록에서 모두 구할 수 있는 회수가 몇 회인지 구하는 문제 원하는 목록의 수 만큼 할인 목록을 추가해서 원하는 목록 범위만큼 순회해서 구현 func solution(_ want:[String], _ number:[Int], _ discount:[String]) -> Int { var able = 0 let count = number.reduce(0) { $0 + $1 } let list = Dictionary(uniqueKeysWithValues: zip(want, number)) let discount = discount + Array(repeating: "", count: count) for i in 0.. (dict[$1... 2024. 3. 24.
SwiftUI: 괄호 회전하기 프로그래머스 괄호 회전하기 주어진 문자열을 문자열의 길이만큼 회전하면서 올바른 괄호가 얼마나 있는지 반환하는 문제 프로그래머스 올바른 괄호 문제 코드에 순회 추가해서 구현 func solution(_ s:String) -> Int { let s = s.map({ String($0) }) return s.enumerated().reduce(into: 0) { partialResult, element in var stack = [Character]() (s[element.offset...] + s.prefix(element.offset)).map { bracket in if stack.last == "(" && bracket == .. 2024. 3. 23.
SwiftUI: 멀리 뛰기 프로그래머스 멀리 뛰기 n까지 도달하는 경우의 수를 구하는 문제 n - 2의 경우의 수와 n - 1의 경우의 수를 더한 DP로 구현 func solution(_ n:Int) -> Int { var F = [0, 1, 2] while F.count 2024. 3. 22.
SwiftUI: 예상 대진표 프로그래머스 예상 대진표 대진표 상의 두 플레이어가 만나는 시점을 구하는 문제 a와 b가 일치할 때 까지 반으로 나눠서 그 횟수를 반환 하도록 구현 func solution(_ n:Int, _ a:Int, _ b:Int) -> Int { var a = a var b = b var count = 0 while a != b { count += 1 a = (a.isMultiple(of: 2) ? a : a + 1) / 2 b = (b.isMultiple(of: 2) ? b : b + 1) / 2 } return count}// N = 4// 3// 2 2// 1 1 1 1// N A B answ.. 2024. 3. 21.
SwiftUI: N개의 최소공배수 프로그래머스 N개의 최소공배수 주어진 배열의 최소공배수를 구하는 문제 최소 공배수라는 건 결국 배열의 모든 수의 공배수이기 때문에, 배열의 가장 큰 수를 곱하면서 모든 수의 공배수인지 검사하도록 구현 func solution(_ arr:[Int]) -> Int { var i = 1 while arr.map({(arr.max()! * i).isMultiple(of: $0)}).contains(false) { i += 1 } return arr.max()! * i}// arr result// [2,6,8,14] 168// [1,2,3] 6// [1,2,3,4,5,6,7] 60 2024. 3. 20.
SwiftUI: 점프와 순간 이동 프로그래머스 점프와 순간 이동 1칸 앞으로 가거나 현재 위치의 2배를 이동할 수 있을 때 주어진 수까지 도달하는 횟수를 구하는 문제 2진수로 변환해보니 1의 개수와 답이 일치해서 주어진 수의 1의 개수를 반환하도록 구현 func solution(_ n:Int) -> Int { n.nonzeroBitCount}// 101// 110// 1001110001000// N result// 5 2// 6 2// 5000 5 2024. 3. 19.
SwiftUI: 연속 부분 수열 합의 개수 프로그래머스 연속 부분 수열 합의 개수 앞과 뒤가 이어진 수열(= 연속 수열)에서 도출 될 수 있는 합의 개수를 찾는 문제 Set을 사용한 이중 for문으로 구현 func solution(_ elements:[Int]) -> Int { var numbers = Set() for i in 0.. 2024. 3. 18.
SwiftUI: 귤 고르기 프로그래머스 귤 고르기 주어진 배열에서 k개의 귤을 꺼낼 때 크기의 수가 가장 적은 수를 구하는 문제 Dictionary로 귤의 사이즈의 개수 내림차순으로 정렬하고, 개수를 비교해가도록 구현 func solution(_ k:Int, _ tangerine:[Int]) -> Int { var K = [k, 0] var box = tangerine.reduce(into: [:]) { partialResult, size in partialResult[size, default: 0] += 1 }.values.sorted() while K[0] > 0 { K[0] -= box.removeLast() K[1] += 1 } return.. 2024. 3. 18.
SwiftUI: 영어 끝말잇기 프로그래머스 영어 끝말잇기 주어진 인원 수와 배열을 통해 끝말잇기의 결과를 반환하는 문제 현재 턴을 계속 계산하면서, 스택과 Set을 통해 이번 턴의 통과 여부를 결정하도록 구현 func solution(_ n:Int, _ words:[String]) -> [Int] { var turn = [0, 0] var words = words var stack = [Character]() var duplication = Set() while !words.isEmpty { let word = words.removeFirst() turn[0] = turn[0].quotientAndRemainder(dividingBy: n).remainder +.. 2024. 3. 18.
SwiftUI: 영어 끝말잇기 프로그래머스 영어 끝말잇기 주어진 인원 수와 배열을 통해 끝말잇기의 결과를 반환하는 문제 현재 턴을 계속 계산하면서, 스택과 Set을 통해 이번 턴의 통과 여부를 결정하도록 구현 func solution(_ n:Int, _ words:[String]) -> [Int] { var turn = [0, 0] var words = words var stack = [Character]() var duplication = Set() while !words.isEmpty { let word = words.removeFirst() turn[0] = turn[0].quotientAndRemainder(dividingBy: n).remainder +.. 2024. 3. 18.
SwiftUI: 카펫 프로그래머스 카펫 바깥을 감싸는 brown과 내부 yellow를 통해 카펫의 크기를 구하는 문제 풀이 생각 안나서 해답의 2차 방정식 따라 제출 func solution(_ brown:Int, _ yellow:Int) -> [Int] { let brown = Double(brown) let yellow = Double(yellow) let width = Int((brown / 2 - 2 + sqrt((pow((brown / 2) - 2, 2) - 4 * yellow))) / 2) let height = Int(yellow) / width return [width + 2, height + 2]}// width = (brown / 2 - 2 + sqrt((brown .. 2024. 3. 17.
SwiftUI: 짝지어 제거하기 프로그래머스 짝지어 제거하기 주어진 문자열의 글자를 짝 맞춰 제거해서 모든 글자를 제거할 수 있는 지를 확인하는 문제 프로그래머스 올바른 괄호에서 사용했던 코드 수정해서 제출 func solution(_ s:String) -> Int { var stack: [Character] = [] s.map { character in stack.last == character ? _ = stack.removeLast() : stack.append(character) } return stack.isEmpty ? 1 : 0}// s result// baabaa 1// cdcd 0 2024. 3. 16.
SwiftUI: 피보나치 수 프로그래머스 피보나치 수 간단한 피보나치 문제 n번 째 피보나치 수를 1234567로 나눈 수를 반환 func solution(_ n:Int) -> Int { var F = [0, 1] while F.count 2024. 3. 15.
SwiftUI: 다음 큰 숫자 프로그래머스 다음 큰 숫자 주어진 수보다 큰 수 중 1의 개수가 같은 수를 찾는 문제 nonzeroBitCount를 사용해서 while 문으로 구현 func solution(_ n:Int) -> Int { var N = n + 1 while(n.nonzeroBitCount != N.nonzeroBitCount) { N += 1 } return N}// n result// 78 83// 15 23 2024. 3. 14.
SwiftUI: 이진 변환 반복하기 프로그래머스 이진 변환 반복하기 주어진 문자열에서 0을 제거하고, 1의 개수를 2진수로 표현하는 것을 문자열이 “1”이 될 때 까지 반복하는 문제 String의 진수 변환을 사용해서 구현 func solution(_ s:String) -> [Int] { var answer = [0, 0] var s = s while(s != "1") { answer[0] += 1 answer[1] += s.filter { $0 == "0" }.count s = String(s.filter { $0 == "1" }.count, radix: 2) } return answer}// s result// "11001010.. 2024. 3. 13.
SwiftUI: 올바른 괄호 프로그래머스 올바른 괄호 주어진 문자열의 괄호가 알맞게 매칭되었는지 검사하는 문제 스택으로 구현func solution(_ s:String) -> Bool { var stack: [Character] = [] s.map { bracket in stack.last == "(" && bracket == ")" ? _ = stack.removeLast() : stack.append(bracket) } return stack.isEmpty}// s answer// "()()" true// "(())()" true// ")()(" false// "(()(" false 2024. 3. 12.
SwiftUI: 최솟값 만들기 프로그래머스 최솟값 만들기 주어진 배열 A, B의 값을 1:1로 곱하여 나올 수 있는 수 중 가장 작은 수를 구하는 문제 이론상 가장 작은 수가 되려면 (작은 수 * 큰 수) + (작은 수 * 큰 수) + … = 가장 작은 수로 생각해서 A와 B를 오름차순, 내림차순으로 정렬해서 순회 func solution(_ A:[Int], _ B:[Int]) -> Int { let a = A.sorted(by: ) return a.enumerated().reduce(0) { partialResult, element in partialResult + element.element * b[element.offset] }}// A B answer// [1, 4, 2.. 2024. 3. 11.
SwiftUI: JadenCase 문자열 만들기 프로그래머스 JadenCase 문자열 만들기 문자열을 JadenCase라는 문자열로 만드는 문제JadenCase는 단어의 첫 글자만 대문자로 표시하고 나머지는 소문자로 표시하는 문자열 띄어쓰기가 연속된다면(” ”) 오답이라서, split을 사용하지 않고 구현 func solution(_ s:String) -> String { s.dropFirst().reduce("\\(s.first!.uppercased())") { partialResult, char in "\\(partialResult)\\(partialResult.last == " " ? char.uppercased() : char.lowercased())" }}// s return// "3p.. 2024. 3. 9.