알고리즘 문제 풀이 73

[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. [3차] 파일명 정렬

프로그래머스 LV2. [3차] 파일명 정렬 ✅ 프로그래머스 LV2. [3차] 파일명 정렬 하하,, 문제 딱 봤을 때 이건 10분컷! 이랬는데 결국은 엄청 오래걸림 처음에는 정규 표현식으로 해결하려고 했는데, 정규 표현식 공부를 제대로 해본 적 없어서 구글링으로 사용하는건 학습에 별로 도움 안될거 같아서 패스 (+ 정규 표현식의 시간복잡도에 대한 개념이 없어서 알고리즘이 효율적이지 않을 수도 있단 생각도 들었음) 그래서 그냥 for문을 통해서 접근함. 근데!! 65점에서 막혔음 ^__^ ✅ 코드 (틀린코드 65점) 하도 많이 틀려서 질문도 함.. 반례를 못찾아서 https://programmers.co.kr/questions/30185 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로..

[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] BOJ 1753 최단경로

BOJ 1753 최단경로 ✅ 다익스트라 알고리즘의 가장 대표적인 문제였음. 근데 나 못품 ..ㅎ 다익스트라 알고리즘은 맞았는데 자꾸 시간초과가 나는거임. 근데 나중에 알고보니까 자료구조 힙을 사용하지 않아서더러군 !_! 그래서 다른 사람 알고리즘 기반으로 학습하기로 함. 여기서 시간 너무 잡아먹길래,, 아니면 힙부터 하고 다시 돌아와야지. ✅ 내 코드 - 시간초과 struct b1753 { static func run() { // 입력부 let firstLine = readLine()!.split(separator: " ").map( {Int(String($0))! }) let secondLine = Int(readLine()!)! var table = [Int](repeating: Int(1e9), ..

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

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

[Swift] BOJ 11724 연결 요소의 개수

BOJ 11724 연결 요소의 개수 ✅ 예전이면 이걸 어떻게 하지 싶었는데, 이제는 쉽게 풀어낼 수 있다. BFS / DFS의 경우에는 tree형태로 이론을 배웠어서 그래프 형태면 늘상 포기하곤 했었는데, 그래프도 해결할 수 있었다니..! 신기해 근데 원래는 문제 풀다가 어려운거 아니면 포스팅 안하는데, 어느 순간부터인가 모든 문제를 포스팅 하고 있다. 나동빈 파이썬 책에서는 BFS가 DFS보다 빠르다라고 하였지만, 스위프트에서는 구현에 따라 BFS보다 DFS가 빠를 수 있다. 아래의 글은 내가 DFS / BFS를 구현한 알고리즘이다. 2022.04.02 - [코딩테스트] - [Swift] BOJ 1260 DFS와 BFS 나는 주로 BFS의 경우 removFirst를 이용하기 때문에, 배열의 write ..