Lv2 8

[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. 큰 수 만들기 ✅ 이 문제는 정말 오랜기간 도전을 하여 풀어냈다. (첫 도전) 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. 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!..

[Swift] 프로그래머스 LV2. 튜플

프로그래머스 LV2. 튜플 ✅ 문제를 이해하기가 어려웠지 푸는데 어렵지는 않았음. 근데 왜 포스팅하냐면, 푸는데 오래걸려서. 정규 표현식으로 분리하려고 했는데, 사용하기가 불편했고, split을 통해서 "}"로 분리해서 작업을 했더니, 원하는 형태로 바꾸는데 for이 많이 들어가서 코드가 별로가 되었음. 근데 코드를 보니까 분리를 "},{"로 가능해 보여서 그렇게 설계함. 문제를 풀고난 후에 구글링을 하면서 코드 리팩토링까지 마침. component와 split에 대해서 더 자세히 알아야겠다고 다짐하며 마침. 🟠 문제에서 이해가 가지 않는 부분 해석 "{{4,2,3},{3},{2,3,4,1},{2,3}}" // [3, 2, 4, 1] {3} {2,3} {4,2,3} {2,3,4,1} 이렇게 순서로 봐야한..

[Swift] 프로그래머스 LV. 2 N개의 최소공배수

프로그래머스 LV. 2 N개의 최소공배수 ✅ 최소공배수와 최대공약수를 사용할 때는 직접 구하지 말고 유클리드 호제법을 이용하자. 호제법을 이용한다면 쉽게 풀수가 있다. struct p12953 { static func run() { print(p12953.solution([2,6,8,14])) // 168 } static func solution(_ arr:[Int]) -> Int { // 최소공배수 찾는 알고리즘 하나 마련해서 쭉 돌자 var prev = arr[0] for i in 1.. Int { return (a * b) / gcd(a, b) } // 최대공약수 static func gcd(_ a: Int, _ b: Int) -> Int { var a = a var b = b var r = 0 w..