프로그래머스 30

[Swift] 프로그래머스 LV2. [1차] 뉴스 클러스터링

프로그래머스 LV2. [1차] 뉴스 클러스터링 ✅ 걸린시간 : 4:26 ~ 5:35 (약 1시간 10분) 처음으로 문제를 해결하는데 걸린시간 4:26 ~ 4:56(30분) 추가적으로 시간이 걸린 이유: 테스트케이스 4,7,9,10,11 실패 테스트 케이스 4,7,9,10,11 [반례] str1: "BAAAA" str2: "AAA" answer: 32768 이 부분에서 봐야하는 점은 중복의 처리이다. 2글자씩 끊을 경우, str1 = ["BA", "AA", "AA", ""AA"] str2 = ["AA", ""AA"] 이렇게 나뉘게 된다. 여기에서 str1에는 AA가 3개 str2에는 AA가 2개이다. 따라서 중복은 2개가 되어야한다. 그런데 위의 테스트 케이스가 틀린 경우에는 이를 정확하게 처리하지 못하는..

[Swift] 프로그래머스 LV2. 수식 최대화

프로그래머스 LV2. 수식 최대화 ✅ 구현만 하면 문제였는데, 은근히 오래걸렸다. 내가 구현에서 생각보다 오래걸리는데, 문제를 생각하고 설계는 빨리 마치는데, 근데 자꾸 어떤 문제가 발생한다.. 예외처리가 부족하기도 하지만, 그보다도 코드상에서 remove 같은 작업에서 발생하는 실수가 너무 많다. ✅ 코드 알고리즘 접근법에 대해서 처음에는 계산기 알고리즘을 사용하려고 했다. 중위 후위 등 구글에 치면 다양한 알고리즘이 나온다!! 하지만 난, 꼭 그런걸 정량적으로 알고 있어야 문제를 푸는건 불만이었기에 다른 로직으로 내 방식대로 풀어보았다. priority를 6번 반복하는 이유는 어차피 연산자 3개로 우선순위를 매기는 경우의 수가 6가지 밖에 되지 않는다. 두번째는 while문인데, 연산자를 찾아서 그 ..

[Swift] 프로그래머스 LV2. 방문 길이

프로그래머스 LV2. 방문 길이 ✅ 쉬웠다. 문득 드는 생각인데, 이렇게 잘 풀리는 문제만 푸는게 도움이 될까 싶다.. ㅠ 🟠 알고리즘 접근 및 풀이의 흐름사실 난이도 자체는 쉬운데 +9점이나 받았다. 카카오 문제가 더 까다로웠던 것 같은데..? 1. 처음에는 point = (x,y)로 두어서 방문한 point를 재방문 안하는 것으로 처리 문제점: (5,5) -> (4,5)와 (4,4) -> (4,5)를 구분할 수 없어서 문제 풀이의 오류 발생 2. 시작점과 도착점을 전부 저장하게끔 변경previousPoint, currentPoint = (5,5,4,5) 이런 식으로 저장따라서 어디에서 어디로 가는지 확인할 수 있어짐문제점 : 왔다갔다의 경우 중복으로 체크가 된다.예시 (4,5,5,5) (5,5,4,5..

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

프로그래머스 LV2. 주차 요금 계산 ✅ 프로그래머스 LV2. 주차 요금 계산 2022 KAKAO BLIND RECRUTMENT 문제다! 카카오 문제를 풀때는 그냥 이름만으로도 늘 짜릿해. ✅ 코드 레벨은 2지만 풀었을 때 점수는 1점만 주더라. 그만큼 쉬웠다는 말이겠지 ㅜㅠ 근데 진짜 쉽긴 했다... import Foundation func solution(_ fees:[Int], _ records:[String]) -> [Int] { var dict: [String: String] = [:] // 차량번호 : 시간 var totalTimeArray: [String: Int] = [:] // 차량번호 : 누적시간 var priceDict: [String: Int] = [:] // 차량번호 : 금액 //..

[Swift] 프로그래머스 LV2. 큰 수 만들기

프로그래머스 LV2. 큰 수 만들기 ✅ 이 문제는 정말 오랜기간 도전을 하여 풀어냈다. (첫 도전) 2021/08/08 (두번째 도전) 2021/11/18 (세번째 도전) 2022/04/13 알고리즘 공부하다가 귀찮아서 계속 미뤘고, 자꾸 미루다가 결국 해야할 것 같아서 풀어냄! 이거 머릿속으로는 이해가 되는데, 구현하기가 너무 어려웠다. ✅ 첫 도전 첫 도전에서의 코드 아래 사진을 보면 알겠지만 시간 초과로 fail // // main.swift // algorithm // // Created by Hamlit Jason on 2021/08/08. // /* 큰 수 만들기 https://programmers.co.kr/learn/courses/30/lessons/42883 실패 */ import Fou..

[Swift] 프로그래머스 LV2. 쿼드 압축 후 개수 세기

프로그래머스 LV2. 쿼드 압축 후 개수 세기 ✅ 문제를 보자마자 재귀로 해야한다고 생각이 들었음. 예전에 학교 수업에서 자료구조 알고리즘 시간에 divide and conquer로 문제를 풀었던 기억이 있는데, 그래서 이를 활용함. 근데 그때는 작은 문제에서 큰 문제로 갔었고, 이번에는 큰 문제에서 작은 문제로 내려가야 했음. ✅ 코드 // https://programmers.co.kr/learn/courses/30/lessons/68936 import Foundation struct p68936 { static func run() { print(p68936.solution([[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]])) // [4,9] } static var zeroCo..

[Swift] 프로그래머스 LV2. 전력망을 둘로 나누기

프로그래머스 LV2. 전력망을 둘로 나누기 ✅ 이거 왜 포스팅 하냐면 두가지 의의가 나한테 있음. 1. 구글링 없이 BFS / DFS를 기반으로 알고리즘을 생각해내어서 문제를 해결함. 2. minValue를 계산하는 수식이 틀려서, 알고리즘이 맞음에도 뭐가 문제인지 고민한 시간들이 답답해서 문제가 되는 부분은 minValue를 업데이트 하는 과정에서 n - count - count를 해야하는데, 어떻게 생각했는지, count - n 이랑 동일한 값이라고 생각했음. 그래서 수정완료!! ✅ 코드 및 알고리즘 접근법 알고리즘 접근법은, input의 경우에는 늘 그랬듯 저렇게 받는다. 저렇게 받아야 각 정점(노드)들이 연결되어 있는게 빠지지 않고 설정된다. 그 다음에는 이중 for문을 사용하는데, 상위 for문..

[Swift] 프로그래머스 LV2. 가장 큰 수

프로그래머스 LV2. 가장 큰 수 ✅ 프로그래머스 LV2. 가장 큰 수 이번 문제를 포스팅 하는 이유는 조금 특이한 정렬 방법 때문이다. 우선 정렬를 저렇게 하는데, 저렇게 하면 각 숫자의 길이에 관계없이, 정렬을 할 수가 있다. 그리고 0000을 반환하는 옵션을 하나 추가하는데, 내림차순임으로 가장 앞자리가 0이면 모든 값이 0이라는 의미니까 이렇게 작성한다. //https://programmers.co.kr/learn/courses/30/lessons/42746 import Foundation struct p42746 { static func run() { // print(p42746.solution([6, 10, 2])) // 6210 // print(p42746.solution([3, 30, 34..

[Swift] 프로그래머스 LV2. 땅따먹기

프로그래머스 LV2. 땅따먹기 ✅ 프로그래머스 LV2. 땅따먹기를 푸는데 생각보다 많이 어려웠음. 처음에는 최댓값 찾고 다음 Index의 값을 0으로 세팅하려고 했는데, 그러니까 실패함 -> 잘못된 접근 그래서 다음으로는 점화식을 찾아보려고 했는데, 에러 케이스를 스스로 발견하고 다른 방법을 고민함. 구글링 결과 어떤 분에게서 아이디어를 얻었는데, 이번에 느낀 점은 이러한 풀이 방식도 있다는 것을 기억하고, 문제 접근하는데 더 열린 사고로 다가가야겠음. 사실 그냥 여러 케이스를 경험해 보면서, 어떠한 문제를 만났을 때 이전에 시도해 본 방법 중 하나가 기억에 떠올라 그 방법을 풀기를 기대하는 측면이 더 큼. 일단 처음에는 정답은 맞았으나, 효율성을 0점을 받았는데, max의 parameter로 3개의 값..

[Swift] 프로그래머스 LV2. JadenCase 문자열 만들기

프로그래머스 LV2. JadenCase 문자열 만들기 ✅ 프로그래머스 LV2. JadenCase 문자열 만들기 이거 왜 포스팅 하냐면, 코딩 테스트에서 dumped core 나는 경우 먼저 확인해 보고자 하는 의미에서 포스팅함. 물론 알고리즘이 정확하다고 가정 아래 코드에서 7번 줄의 주석을 보면 코드를 수정한 것을 볼 수 있는데, 주석 처럼 작성하니 에러가 났음 func solution(_ s:String) -> String { let s = s.components(separatedBy: " ").map { $0.lowercased() } var answer = [String]() s.forEach { str in if ((str.first?.isLetter) != nil) { // str.first!..