본문 바로가기

Algorithm의 모든것

(8)
[Alogorithm의 모든것] 알고리즘 커리큘럼 [ 자료구조] 1. 배열과 리스트 2. 구간 합 3. 투 포인터 4. 슬라이딩 윈도우 5. 스택/큐 [정렬] 1. 버블 정렬 2. 선택 정렬 3. 삽입 정렬 4. 퀵 정렬 5. 병합 정렬 6. 기수 정렬 [탐색] 1. 깊이 우선 탐색 2. 너비 우선 탐색 3. 이진 탐색 [그리디] [정수론] 1. 소수 구하기 2. 오일러 피 3. 유클리드 호제법 4. 확장 유클리드 호제법 [그래프] 1. 그래프의 표현 2. 유니온 파인드 3. 위상 정렬 4. 다익스트라 5. 벨만-포드 6. 플로이드-워셜 7. 최소 신장 트리 [트리] 1. 트리 2. 트라이 3. 이진 트리 4. 세그먼트 트리 5. 최소 공통 조상 [조합] [동적 계획법] [기하] 참조 서적 : Do it ! 알고리즘 코딩 테스트 자바편
[Algorithm의 모든것] Swift_큐(Queue) 안녕하세요 ~! 지난번에 스택에 대해 알아봤다면 이번엔 그 단짝 친구인 큐에 관해 알아보려고 합니다. 큐(Queue)란 ? 큐(Queue)는 먼저 입력된 데이터가 먼저 출력되는 FIFO(First In First Out) 데이터 구조를 나타냅니다. 스택의 예시로는 마트의 계산대가 있습니다. 먼저 계산하러 온 손님이 계산을 끝내고 먼저 나가게 되죠 ! 큐도 이와 마찬가지입니다. 먼저 들어온 데이터가 먼저 나가게 되는 구조입니다. 큐의 주된 메소드는 다음과 같습니다. enqueue() : 큐의 맨 뒤에 새로운 요소를 추가 dequeue() : 큐의 맨 첫 번째 요소를 제거한 뒤 반환 peak() : 큐의 첫 번째 요소를 반환하되, 제거하지는 않음 clear() : 큐를 재설정해 빈 상태가 되게 함 count..
[Algorithm의 모든것] Swift_스택(Stack) 안녕하세요 ~! 오늘은 스택에 관해 공부를 해보려고 합니다. 스택(Stack)이란 ? 스택(Stack)은 나중에 입력된 것이 먼저 출력되는 LIFO(Last In First Out) 데이터 구조를 나타냅니다. 학교 다닐 때에 교수님이 강의에서 스택의 예시로 택시 기사분들이 차에 두시는 동전 케이스를 예로 들어주셨었는데요 이렇게... 생긴 ㅎㅎㅎㅎㅎ 네, 카드 결제가 활성화 되지 않았던 때엔 저게 많이 보였었는데 요새는 안보이더라고요 ㅠㅠ 무튼~? 저렇게 동전을 꼽으면 마지막에 꼽은게 먼저 뽑히게 됩니다. 이런 구조를 바로 LIFO 구조라고 해요. 스택은 바로 여기서 착안된 알고리즘입니다. 스택에서 주로 사용되는 메소드는 다음과 같습니다. push() : 스택의 하단에 요소를 추가 pop() : 스택 상단..
[Algorithm의 모든것] (Swift)프로그래머스-크레인 인형뽑기 게임 문제 링크 : programmers.co.kr/learn/courses/30/lessons/64061 코드 보기 더보기 import Foundation func solution(_ board:[[Int]], _ moves:[Int]) -> Int { var copiedBoard = board var basket: [Int] = [] var answer = 0 moves.forEach { for deep in 0.. 1 { let lastIndex = basket.index(basket.endIndex, offsetBy: -1) let index = basket.index(basket.endIndex, offsetBy: -2) if basket[lastIndex] == basket[index] { bask..
[Algorithm의 모든것] (Swift)프로그래머스-다리를 지나는 트럭 문제 코드 보기 더보기 내풀이 import Foundation func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int { var answer = 0 var timeOnBridge: [Int] = [] //트럭이 다리에 오른 시간을 저장 var bridgeWeight = 0 var truckOnTheBridge: [Int] = [] var waitingTruck = truck_weights while true { answer += 1 if let truck = truckOnTheBridge.first, (answer-timeOnBridge.first!) == bridge_length { truckOnTheBridge.re..
[Algorithm의 모든것] (Swift)프로그래머스-자연수 뒤집어 배열로 만들기 문제 코드 보기 더보기 내 풀이 func solution(_ n:Int64) -> [Int] { return (String(n).map{String($0)}.map{Int($0)} as! [Int]).reversed() } 다른 사람의 풀이 func solution(_ n:Int64) -> [Int] { return "\(n)".compactMap { $0.hexDigitValue }.reversed() } 느낀 점 간단해 보였는데 테스트케이스를 실행해볼 때마다 틀리길래 "뭐가 문제지..." 하며 몇 번씩 들여다본 문제였습니다. 처음엔 입출력 예시에 홀려 내림차순 정렬 코드를 만들었었습니다. 하지만 정답은 문제 제목 그대로 뒤집어 배열로 만들기였습니다. 아~~주아주아주아~~주 혹시나 저 같은 상황에 처하..
[Algorithm의 모든것] (Swift)프로그래머스-정수 제곱근 판별 문제 코드 보기 더보기 내풀이 import Foundation func solution(_ n:Int64) -> Int64 { return sqrt(Double(n)) - floor(sqrt(Double(n))) > 0 ? -1 : Int64(pow(sqrt(Double(n))+1, 2)) } 다른 사람의 풀이 import Foundation func solution(_ n:Int64) -> Int64 { let t = Int64(sqrt(Double(n))) return t * t == n ? (t+1)*(t+1) : -1 } 느낀점 이번 문제를 통해서 Foundation 프레임워크의 제곱(pow) 함수와 제곱근(sqrt) 함수 그리고 버림(floor) 함수를 알게 됐습니다. 문제는 위 두 함수를 사용..
[Algorithm의 모든것] 프로그래머스-문자열 다루기 기본 문제 더보기 내 풀이 func solution(_ s:String) -> Bool { if s.count == 4 || s.count == 6 { return s == s.filter{ $0.isNumber } ? true : false } return false } 다른 사람의 풀이 func solution(_ s:String) -> Bool { return (Int(s) != nil && (s.count == 4 || s.count == 6)) ? true : false } 느낀점 저는 배열의 filter 함수를 써서 숫자를 구별해내어 숫자면 true, 숫자가 아니면 false를 출력하는 식의 코드를 만들었습니다. 근데 많은 사람들의 풀이를 보니 s값(String)을 Int로 형변환하여 nil이 아닌..