개발/PS 21

[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] 프로그래머스 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] 프로그래머스 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

[Swift] 프로그래머스 LV1 비밀지도

String을 index로 접근하는 방법을 배울 수 있는 예제였습니다. 그건 그렇고 풀고나서 다른 사람들 풀이를 보니 정말 대단한 사람이 많습니다.. import Foundation func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] { var map1: [String] = [] var map2: [String] = [] map1 = decode(n, arr1) map2 = decode(n, arr2) return integrateMaps(map1, map2) } func decode(_ n:Int,_ arr:[Int]) -> [String]{ // 2진수로 만들기 -> 풀고 알았는데 radix를 쓰면 엄청 쉽다.. var tempMap:[St..

개발/PS 2022.03.12

[Swift] 프로그래머스 Lv1 모의고사

스위프트로 푼 첫 문제입니다. 여기서 알게된 중요한 사실은 스위프트의 Dictionary는 순서를 보장하지 않는다는 것입니다. 따라서 Dictionary의 순서가 필요하다면 정렬해서 사용해야 합니다. import Foundation func solution(_ answers:[Int]) -> [Int] { let first: [Int] = [1,2,3,4,5] let second: [Int] = [2,1,2,3,2,4,2,5] let third: [Int] = [3,3,1,1,2,2,4,4,5,5] var right: [Int: Int] = [1: 0, 2: 0, 3: 0] var rank: [Int] = [] print(right) for i in 0.. i && first[i] == answers[i..

개발/PS 2022.02.19

[Python] 프로그래머스 Lv1 신고 결과 받기

풀이 def solution(id_list, report, k): declare = {} # 신고당한 사람 : 신고한 사람 declared = [] # 유저 순서대로 신고 당한 수 answer = {} for i in id_list: # 유저 수 만큼 배열 생성 declare[i] = [] answer[i] = 0 // 초기 신고 값은 (이름: 0) for i in report: a, b = i.split(" ") # 신고하는 사람과 당한 사람을 나눔 if a not in declare[b]: # 중복 신고 체크 declare[b].append(a) # 중복이 아니라면 추가 for i in declare.values(): # 각 유저별 신고 당한 수 저장 declared.append(len(i)) for..

개발/PS 2022.01.23

[Python] 프로그래머스 Lv2 기능개발

풀이 def solution(progresses, speeds): answer = [] complete = [] # 배포일 배열 for i in range(len(progresses)): #1 배포일을 계산해 complete에 대입 temp = (100 - progresses[i]) // speeds[i] if (100 - progresses[i]) % speeds[i] == 0: complete.append(temp) else: complete.append(temp + 1) count = 0 # 배포되는 기능 수 check = complete[0] # 처음 기능 배포일 for j in range(len(complete)): #2 배포되는 기능 수를 계산해 answer에 대입 if check >= com..

개발/PS 2022.01.03

[Python] 프로그래머스 Lv1 완료하지 못한 선수

풀이 def solution(participant, completion): participant.sort() completion.sort() for i in range(0, len(completion)): if participant[i] != completion[i]: return participant[i] return participant[-1] #1. 배열을 모두 정렬한다. #2. 배열의 같은 인덱스를 비교해 다르면 그때의 participant의 값이 완주하지 못한 선수이다. #3. 만약 completion의 수 만큼 돌았는데도 모두 같다면 participant의 마지막 값이 완주하지 못한 선수이다. 해시 문제라고 써있는데 방법이 생각나지 않아 정렬로 풀었다. 처음에는 단순하게 for문을 2중으로 돌..

개발/PS 2022.01.03