본문 바로가기

programmers44

SwiftUI: 최댓값과 최솟값 프로그래머스 최댓값과 최솟값 음수를 포함한 문자열에서 최대와 최소 값을 찾는 문제 띄어쓰기를 기준으로 Int로 변환한 배열을 Set을 통해 거르고 최대와 최소를 반환하도록 구현 func solution(_ s:String) -> String { var numbers = Set(s.split(separator: " ").map { Int($0)! }) return "\\(numbers.min()!) \\(numbers.max()!)"}// s return// "1 2 3 4" "1 4"// "-1 -2 -3 -4" "-4 -1"// "-1 -1" "-1 -1" 2024. 3. 8.
SwiftUI: 로또의 최고 순위와 최저 순위 프로그래머스 로또의 최고 순위와 최저 순위 주어진 배열에서 도출될 수 있는 로또의 최고, 최저 순위를 찾는 문제 import Foundationfunc solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] { var win = win_nums.reduce(1) { partialResult, num in return lottos.contains(num) ? partialResult : min(partialResult + 1, 6) } return [max(1, win - lottos.filter({ $0 == 0 }).count), win]} 2024. 3. 7.
SwiftUI: 문자열 나누기 프로그래머스 문자열 나누기 문자열의 첫 글자부터 순회해서, 첫 글자와 일치하지 않는 글자가 더 많아지면 단어로 만들고 그 수를 세는 문제스택을 위해 배열을 뒤집고, 배열을 순회하며 비교해서 구현 func solution(_ s:String) -> Int { var reversed = String(s.reversed()) var answer = 0 var x = reversed.last! var count1 = 0 var count2 = 0 while(!reversed.isEmpty) { switch(reversed.popLast()) { case x: count1 += 1 default: .. 2024. 3. 7.
SwiftUI: 숫자 짝꿍 프로그래머스 숫자 짝꿍 문자열 X와 Y에 모두 들어있는 숫자를 모아 가장 큰 수를 반환하는 문제9부터 0까지 X와 Y에 포함된 수의 개수를 찾아 문자열을 반환하고, 만약 “00”이 된다면 0을 반환하도록 구현 func solution(_ X:String, _ Y:String) -> String { var answer = "9876543210".reduce("") { partialResult, number in let x = X.filter({ $0 == number }) let y = Y.filter({ $0 == number }) if !x.isEmpty, !y.isEmpty { return partialResult + Arr.. 2024. 3. 7.
SwiftUI: 체육복 프로그래머스 체육복 우선 여벌이 있는 학생의 도난을 제거해서, 배열을 정렬한 뒤 도난과 여벌 배열 비교해서 처리했습니다. func solution(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int { var lost = lost var reserve = reserve // 여벌 있는 학생 도난 제거 lost.map { number in if reserve.contains(number) { lost.removeAll { $0 == number } reserve.removeAll { $0 == number .. 2024. 3. 7.
SwiftUI: 가장 많이 받은 선물 func solution(_ friends:[String], _ gifts:[String]) -> Int { // 2차원 테이블 생성 // a b c 합 // a 0 0 0 0 // b 0 0 0 0 // c 0 0 0 0 var table = Array(repeating: Array(repeating: 0, count: friends.count + 1), count: friends.count) // 인덱싱 용 딕셔너리 var index: [String: Int] = [:] // 인덱싱 매핑 _ = friends.reduce(0) { partialResult, friend in index[friend] = partialR.. 2024. 2. 5.
SwiftUI: 크레인 인형뽑기 게임 moves의 원소를 받아 보드의 top부터 내려가며 인형이 연속되는지 검사하는 문제입니다. board의 원소를 검사하면서 인형이 존재하는 top을 검사하고, moves의 인형이 stack의 마지막 원소를 포함하는지 검사하면서 풀었습니다. 다른 분 풀이 보니까 n * n 배열이고, 최대 n이 100으로 크지 않아서 revsed → popLast도 좋은 방법인 것 같습니다.func solution(_ board:[[Int]], _ moves:[Int]) -> Int { var stack: [Int] = [] var top: [Int] = Array(repeating: board.count - 1, count: board.count) for (i, arr) in board.enumera.. 2023. 12. 18.
SwiftUI: [카카오 인턴] 키패드 누르기 이전 손가락 위치를 기억해서 주어진 숫자까지 가장 빠르게 도달할 수 있는 손을 구하는 문제 입니다. 1, 3, 7은 왼손, 4, 6, 9는 오른손으로 처리하고, 2, 5, 8, 0에 대해서는 미리 만들어둔 딕셔너리에서 최소 경로를 찾아가도록 했습니다. func solution(_ numbers:[Int], _ hand:String) -> String { var hand = hand.first!.uppercased() var left = 10 var right = 12 var dict = [2: [1: 1, 4: 2, 7: 3, 3: 1, 6: 2, 9: 3, 2: 0, 5: 1, 8: 2, 0: 3, 10: 4, 12: 4], 5: [1: 2, 4: 1, .. 2023. 12. 18.
SwiftUI: 햄버거 만들기 스택을 사용해서 햄버거가 완성되는지 검사하는 문제입니다. 매 원소를 스택에 추가하고, 마지막 4글자가 1231이 되는지 검사합니다. func solution(_ ingredient:[Int]) -> Int { var stack: [Int] = [] return ingredient.reduce(0) { stack.append($1) if stack.suffix(4).map({ String($0) }).joined() == "1231" { stack.removeLast(4) return $0 + 1 } return $0 }} 2023. 12. 17.
SwiftUI: 신고 결과 받기 메일을 받는 유저와, 정지를 당하는 유저를 검사해야 하는 문제입니다. 유저와 신고 받은 유저에 대한 딕셔너리를 먼저 만들고, 각 유저가 몇 개의 메일을 받는지 반환합니다.중복 신고 케이스가 있어 셋을 통해 중복을 먼저 제거했습니다. func solution(_ id_list:[String], _ report:[String], _ k:Int) -> [Int] { var user: [String: [String]] = Dictionary(uniqueKeysWithValues: zip(id_list, Array(repeating: [], count: id_list.count))) var reported: [String: Int] = Dictionary(uniqueKeysWithValues: zip(.. 2023. 12. 17.
SwiftUI: 신규 아이디 추천 주어진 id를 7단계의 검사 후 결과를 반환하는 문제입니다.정규 표현식을 사용해서 검사합니다. func solution(_ new_id:String) -> String { var new_id = new_id new_id = new_id.lowercased() new_id = new_id.replacingOccurrences(of: "[^a-z0-9-_.]", with: "", options: .regularExpression) new_id = new_id.replacingOccurrences(of: "(\\\\.)\\\\1+", with: ".", options: .regularExpression) new_id = new_id.replacingOcc.. 2023. 12. 17.
SwiftUI: 둘만의 암호 알파벳에서 skip에 포함되는 알파벳을 제거한 후, 배열의 각 원소에서 index만큼 이동한 알파벳을 반환해줍니다. func solution(_ s:String, _ skip:String, _ index:Int) -> String { var result = "" var alphabet = (97...122).map { Character(UnicodeScalar($0)) } alphabet.removeAll { skip.contains($0) } let alphabetDict = Dictionary(uniqueKeysWithValues: zip(alphabet, 0.. 2023. 12. 17.
SwiftUI: 카드 뭉치 문제 링크 주어진 카드 뭉치 1, 2의 첫 번째 원소를 제거해나가면서 cards가 goal과 일치한다면 Yes 아니면 No를 반환합니다. func solution(_ cards1:[String], _ cards2:[String], _ goal:[String]) -> String { var cards1 = cards1 var cards2 = cards2 var cards: [String] = [] goal.forEach { card in if let card1 = cards1.first, card1 == card { cards1.removeFirst() cards.append(card1) } if le.. 2023. 12. 17.
SwiftUI: 대충 만든 자판 문제 링크 각 키까지 도달하기 위한 최소 횟수를 구하는 문제입니다. 각 키의 최소 횟수를 미리 구해두고, reduce로 최소 횟수를 계산합니다.키맵에 존재하지 않는 키가 있을 때 중간에 탈출을 못 해서 임의의 작은 값을 대입했습니다. func solution(_ keymap:[String], _ targets:[String]) -> [Int] { var keyDict: [String.Element: Int] = [:] keymap.map { key in for (index, element) in key.enumerated() { keyDict[element] = keyDict[element] != nil ? min(keyDict[element]!, ind.. 2023. 12. 17.
SwiftUI: 덧칠하기 문제 링크 벽을 덧칠하는 최소 횟수를 구하는 문제입니다. 한 번에 벽을 칠할 수 있는 m이 1이라면 section의 수 만큼 반환하고, 그 외 경우는 최소 1번 이상이니 1로 시작해서 칠할 수 있는 구역을 계산합니다. func solution(_ n:Int, _ m:Int, _ section:[Int]) -> Int { if m == 1 { return section.count } var answer = 1 var last = section.first! + m - 1 section.forEach { i in if i > last { last = i + m - 1 answer += 1 } } .. 2023. 12. 17.
SwiftUI: 추억 점수 문제 링크 photo 배열의 각 배열 당 그리움 점수를 출력하는 문제입니다.우선 이름 배열을 딕셔너리로 만들어서 각 배열 당 그리움 점수를 계산합니다. func solution(_ name:[String], _ yearning:[Int], _ photo:[[String]]) -> [Int] { var answer: [Int] = [] var nameDict: [String: Int] = [:] name.enumerated().map { nameDict.updateValue(yearning[$0], forKey: $1) } for photoArray in photo { var score = 0 photoArray... 2023. 12. 17.
SwiftUI: 성격 유형 검사하기 주어진 배열 검사해서 switch case로 처리, 다른 분 답 보니까 case로 분기 처리 안하고 기본 값에서 choice의 값 처리해서 풀 수 도 있네요. func solution(_ survey:[String], _ choices:[Int]) -> String { // MARK: 같다면 R C J A var answer = "" var type: [String: Int] = [:] "R T C F J M A N".split(separator: " ").forEach { type[String($0)] = 0 } for (index, choice) in choices.enumerated() { let negative = String.. 2023. 12. 17.
SwiftUI: 개인정보 수집 유효기간 링크 n개의 개인정보, m개의 약관이 있어 주어진 날짜 기준으로 개인정보가 약관에 적힌 유효기간을 넘었는지 검사하는 문제입니다.String을 Int로 바꿔서 주어진 날짜와 유효기간을 비교해서 풀었는데, dateFomatter를 쓰는 훨씬 간편한 방법이 있었네요. 답func solution(_ today:String, _ terms:[String], _ privacies:[String]) -> [Int] { var result: [Int] = [] var idx: Int = 1 let todayDate: Int = { return Int(today.replacingOccurrences(of: ".", with: ""))! }() var termsSet:.. 2023. 8. 30.
SwiftUI: 공원 산책 문제 링크 배열을 사용해서 푸는 문제인데 2차원 배열을 1차원 배열로 사용해야 돼서 아래처럼 불편한 접근법 밖에 생각이 안 났어요.print(park[0][park[0].index(park[0].startIndex, offsetBy: 1)]) 그래서 시작 포인트 찾으면서 2차원 배열 새로 만들었고, 입력이 적어서 시간 초과는 안 뜰 것 같아 적당히 조건문만 작성해서 통과했습니다. 그런데 다른 분들 코드 보니까 enum case, 상하좌우 [0, 1], [1, 0], [0, -1], [-1, 0]처럼 좀 더 깔끔하게 코드 짤 수 있는 방법을 알아서 다음에 배열 문제 다시 풀 때는 적용해서 풀어보려고요. 답func solution(_ park:[String], _ routes:[String]) -> [Int.. 2023. 8. 29.
SwiftUI: 달리기 경주 문제 링크 문제 풀이players는 고유한 값으로 크게 분기가 나뉘지 않아서 바로 브루트포스로 풀어보았으나, 시간 초과가 나와서 해시로 도전했어요.players를 Dictionary에 id(등수), 이름으로 나눠서 넣고, callings에서 이름을 받아 Dictionary와 players를 갱신해서 통과했습니다. 정답 코드더보기더보기func solution(_ players:[String], _ callings:[String]) -> [String] { var result: Dictionary = Dictionary() var playerList = players players.enumerated().map { result.updateValue($0 + 1, forKe.. 2023. 8. 12.