전체 글 150

[Swift] 프로그래머스 Lv2 문자열 압축

같은 2단계여도 확실히 Kakao 문제가 난이도가 있는 느낌입니다. 문자열을 다루는데 도움이 될 듯한 문제여서 따로 포스팅합니다. import Foundation func solution(_ s:String) -> Int { var result:Int = s.count // 가장 짧은 길이 저장 if result == 1 {return 1} for i in 1...s.count/2 { var temp:String = "" // 임시 메모리 var diviedNumber:Int = s.count/i // 문자 길이를 나눈 몫 -> 분할 덩어리 var remainNumver:Int = s.count%i // 남은 길이를 붙여줄 문자 길이 var duplicateCount = 1 // 문자열 압축 횟수 for..

개발/PS 2022.06.20

[Swift] 프로그래머스 1단계 모음

IDE없이 코딩테스트 연습을 하는데 지금까지 올린것을 제외한 나머지 Lv1을 한번에 정리하려 합니다. (여유있을때 분리하면서 설명하는걸로!) 목록은 다음과 같습니다. 참고로 모두 제가 짠 코드임으로 더 좋은 방법은 많을 수 있음! Lv1_2016년.swift Lv1_3진법 뒤집기.swift Lv1_x만큼 간격이 있는 n개의 숫자.swift Lv1_두 정수 사이의 합.swift Lv1_제일 작은 수 제거하기.swift Lv1_두 개 뽑아서 더하기.swift Lv1_소수 찾기.swift Lv1_시저 암호.swift Lv1_정수 제곱근 판별.swift Lv1_평균 구하기swift Lv1_정수 내림차순으로 배치하기.swift Lv1_문자열 p와 y의 개수.swift Lv1_문자열 내 마음대로 정리하기.swift..

개발/PS 2022.06.06

[Swift] 클로저(closure) 축약 정리

PS를 하면서 고차함수를 사용하는데 클로저를 다시 한 번 정리할 필요가 있다고 생각이 들었습니다. 원리는 모두 같음으로 reduce를 가지고 정리해 보겠습니다. 축약의 원리는 추론입니다. 클로저가 들어가는 함수에서 타입이 정의되어 있음으로 return과 parameter의 타입의 생략이 가능하고 클로저 in 뒤에는 return이 수반됨으로 생략이 가능합니다. 또한 클로저가 마지막에 오면 후행 클로저로 뒤로 빼서 연산이 가능합니다. 파라미터는 순서대로 $0, $1, $2 등 달러사인을 붙여 사용이 가능합니다. 문법을 공부하며 짧은게 좋다고 막 사용할게 아니라 이해하고 사용하도록 해야겠습니다. let a: [Int] = [1,2,3] // 아래 값은 모두 6 a.reduce(0, {(v1:Int,v2:Int..

iOS/Swift 2022.05.29

[Mac] iTerm2 사용하며 한글이 깨지는 문제 해결

iterm에서 한글이 깨지는 문제를 해결해 보겠습니다. (깨지는것 -> ㄲㅐㅈㅣㄴㅡ ㄴㄱㅓㅅ 이런식으로 깨짐) 인코딩 방식의 문제였고 해결방법은 매우 간단합니다. 설정에서 딱 하나만 바꾸면 됩니다. 먼저 preperence에 들어갑니다 - 왼쪽 상단 iTerm2를 누르고 선택해도 되고 Command + , 를 해도 됩니다. 이제 Profile -> Text -> Unicode normalization form 의 설정을 기존의 None에서 NFC로 바꿔주시면 해결됩니다. 아래 스크린샷대로 설정 변경 이제 iTerm2를 한글과 함께 더 쾌적하게 즐기시면 됩니다~

기타 2022.05.28

[Swift] 프로그래머스 Lv2 주차 요금 계산

요즘 스위프트 자체에 조금 더 익숙해질 필요가 있다고 느껴 "꼼꼼한 재은 씨의 Swift"를 읽고 있는데 좋은 책인 것 같습니다. 개정판이 나온다면 바로 살 생각... 아무튼 같은 맥락으로 알고리즘을 스위프트로 조금씩 풀어보려 노력중입니다.. 서론은 이쯤 하고.. 제가 작성한 코드는 다음과 같습니다. import Foundation var parkingTime: [String: Int] = [:] var indic: [String:Int] = [:] func solution(_ fees:[Int], _ records:[String]) -> [Int] { let outTime = 23*60 + 59 for record in records { let split:[Substring] = record.split..

개발/PS 2022.04.02

[Swift] 구문 레이블 (for문 중첩 제어)

중첩된 for문을 처리할 때 불편한 점이 하위 for문에서 상위 for문을 중단시키기 위해선 변수도 더 선언해야 한다는 문제가 있었습니다. 근데 알고 보니 스위프트에는 좋은 기능이 있었는데 바로 "구문 레이블"입니다. 말 그대로 구문에 이름을 붙여 break나 continue 시킬 수 있는 기능입니다. 기본 문법은 이러합니다. 이름(레이블): { //code... } 코드를 보면 바로 이해가 되니 바로 예제를 보면 a for문이 있고 b for문을 만들었습니다. 그리고 b에서 j가 3이면 b를 포함해 a까지 break 되는 구문입니다. a: for i in 0...5 { print("i: \(i)") b: for j in 0...5 { if j == 3 {break a} print("j: \(j)") }..

iOS/Swift 2022.04.02

[Swift] 프로그래머스 Lv1 다트게임

아직 스위프트로 알고리즘은 익숙하지 않아서인지.. 문제를 푸는데 헤맵니다.. import Foundation func solution(_ dartResult:String) -> Int { let bonus: [Character:Int] = ["S":1, "D":2, "T":3] // 제곱 보너스 var result: Int = 0 var number: String = "" // 10도 고려해야 함으로(사실 두자리는 10 밖에 없어서 다른 방법도 괜찮을듯 합니다.) var data: [Int] = [0,0,0] // 다트 3개 점수 배열 var index: Int = -1 // 3번의 값 저장 for dart in dartResult{ if dart == "*" { // * if index >= 1 { d..

개발/PS 2022.03.29

[Swift] 프로그래머스 Lv2 순위검색

2단계 문제인데 생각보다 시간이 안나와서 결국 정확성 테스트만 맞춘 문제입니다.. 약간 무식하게 문제 그대로 짰는데 시간이 정말 길게 나옵니다.. 그래도 배열을 다루는 여러 메서드를 알게 된 문제였습니다. 정확성 테스트 O, 효율성 테스트 X import Foundation func solution(_ info:[String], _ query:[String]) -> [Int] { var result: [Int] = Array(repeating: 0, count: query.count) var count: Int = 0 for q in query { var checkElements: [String] = q.components(separatedBy: " ") for i in 0..= conditionScor..

개발/PS 2022.03.28

[iOS] TableView, CollectionView refresh 하기 (새로고침)

보통 앱을 사용하다 보면 위로 슬라이드해서 새로고침 하는 부분이 많습니다.(ex. 유튜브, 당근마켓) 그래서 CollectionView에서 새로고침 하는 방법에 대해 알아보겠습니다. (TebleView도 동일합니다.) 기본적으로 CollectionView에는 기본적으로 refreshControl이라는 프로퍼티가 있어서 여기에 refreshController를 만들고 넣어주면 됩니다. 1. refreshController 만들기 // 코드로 refreshControl 선언해서 만들기 private lazy var refresh: UIRefreshControl = { let refreshControl = UIRefreshControl() refreshControl.addTarget(self, action: ..

iOS/UIKit 2022.03.26

[iOS] API 사용시 url에 한글을 사용할 수 없는 문제

url을 사용할 때에 한글을 사용하면 깨진다는 사실을 모르고 decoding만 한참 들여다 봤습니다... 브라우저에 붙여넣거나 포스트맨으로 실행하더라도 분명 응답이 잘 되는데 어디가 문제인지 몰랐는데 url에 한글을 그대로 사용하면 문제가 생긴다는 점을 알았습니다. 해결방법은 생각보다 간단했습니다. 다음은 alamofire를 사용해 데이터를 받아오는 예제입니다. AF.request("여기에 url 입력".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "") // 여기가 중요!! .responseDecodable(of: "decodable 모델") { response in guard case .success(let data) = res..

iOS/Swift 2022.03.25