본문 바로가기
728x90

Codility13

[Swift 알고리즘] Codility lesson4 - FrogRiverOne 안녕하세요 코코종입니다. 오늘은 lesson4(Counting Elements)에 진입했네요. 요번 문제는 0번 자리에 있던 개구리가 X + 1로 건너가고 싶은데 일정 시간에 길의 index에 낙엽이 떨어지고 그 낙엽으로 길이 다 만들어지는(건널수 있는) 최소 시간을 구하는 문제였습니다. 즉, 1 ~ X까지 배열에 한번이라도 낙엽이 다 떨어지는 시간을 구하는 문제였습니다. 또, 만약에 불가능한 경우라면 -1을 리턴하라고 하네요(중간에 비어버리면 건널수 없겠죠?) 아마 배열로 해도 될 것 같기는 하지만..! 이전 단원이 시간 복잡도였으니까 최대한 시간복잡도를 줄이려고 노력했습니다. 아이디어는 다음과 같습니다. dictionary를 만들고 해당 자리에 낙엽이 떨어지면 값을 생성합니다.(한번도 안떨어지면 ni.. 2022. 10. 31.
[Swift 알고리즘] Codility lesson3 - TapeEquilibrium 안녕하세요 코코종입니다. 이번엔 Time Complexity의 마지막 문제입니다. 간단하게 문제 설명을 하자면 [Int]의 중간을 잘라서 좌, 우 각각의 합을 비교했을 때 가장 적은 차이(절댓값)를 구하는 것입니다. 처음에 살짝 잘못 이해했던것이 원소 사이의 지점이 아니라 원소자체를 기준으로 한다고 오해해서 쬐금 꼬였습니다.(문제 잘 좀 읽자) N번 만큼 돌면서 좌 우의 배열의 합을 또 계~~~속 구해버리면 N**2가 되어버려서 시간복잡도가 너무 높아집니다. 그래서 stack구조를 활용해서 앞에서부터 더한 값의 배열, 뒤에서부터 더한값의 배열을 저장하고, 이 두 배열의 차를 구하는 아이디어를 떠올렸습니다. dif에 두 배열의 차를 저장하고 그중 가장 작은 값을 return 해줬습니다. import Fou.. 2022. 10. 31.
[Swift 알고리즘] Codility lesson3 - PermMissingElem 안녕하세요 코코종입니다. 쉬운 문제를 연달아 푸니까 자신감도 생기고 좋네여! ㅋㅋㅋ 이번 문제는 주어진 [Int]가 1 ~ N+1 의 원소를 가지는데 딱 하나의 원소가 빠져있고 그 원소를 찾는 문제였습니다. 단순하게 생각한다면 배열을 받아서 해당 배열의 크기만큼 하나씩 보고 어떤게 빠졌는지 체크하는것 이겠지만!! 주제를 생각해야겠죠? import Foundation import Glibc // you can write to stdout for debugging purposes, e.g. // print("this is a debug message") public func solution(_ A : inout [Int]) -> Int { let a = A.count + 1 var sum = a * (a +.. 2022. 10. 30.
[Swift 알고리즘] Codility lesson3 - FrogJmp 안녕하세요 코코종입니당. lesson3은Time Complexity 인데요 마침 이전 문제에서 시간복잡도를 고려하지 않아서 틀렸어서 ㅎ.. (사실 이걸 노린 순서인가..?) 한번더 생각하게 되더라구요! 현 위치 X, 목표지점 Y, 한번에 뛸 수 있는 거리 D를 주고 Y지점에 도달하는(지나가도 됨) 시간을 구하는 문제였습니다. 단순히 X에서 무한히 D만큼을 더해주고 Y와 비교해도 되지만 아마 그렇게 하면 틀리겠죠?(그러라고 만든문제) 그래서 이동해야 하는 거리(Y - X) / 한번에 뛸 수 있는 거리(D) 를 해준 후 나머지가 있다면 한번 더 뛰게 했습니다. import Foundation import Glibc // you can write to stdout for debugging purposes, e.. 2022. 10. 30.
[Swift 알고리즘] Codility lesson2 - OddOccurrencesInArray 안녕하세요 코코종입니다! 오늘은 OddOccurrencesInArray라는 문제를 풀어봤는데요! 홀수개의 원소를 가지는 Array에서 단 한가지 요소만 짝을 이루지 못하는데 그 원소를 찾아내는 문제였습니다.(솔로 찾기..!) public func solution(_ A : inout [Int]) -> Int { var stack: [Int] = [] let arr: [Int] = A arr.forEach { a in if !stack.contains(a) { stack.append(a) } else { stack = stack.filter{ $0 != a } } } return stack.first! } 처음에는 단순히 Stack에 해당 원소의 유무에 따라 append와 remove를 해준건데요 네,.... 2022. 10. 30.
[Swift 알고리즘] Codility lesson2 - CyclicRotation 알로하~~ 안녕하세요 코코종입니닷 요번주에는 왜이리 갓생을 못산것인지.. 허헣... 일이 많았네요 그래도 힘내서 한문제 풀어봤습니다. 해당 문제는 Codility lesson2 - CyclicRotation에서 확인가능합니다 간단하게 설명을 하자면 배열과 몇번이나 rotate 시킬지인 K가 주어지고, 해당 횟수만큼 돌렸을 때의 결과를 보여주는 것입니다. rotate는 [1, 2, 3, 4] 라고 할 때 [2, 3, 4, 1]로 변환하는 것을 뜻합니다. (처음에 문제를 제대로 안읽어서 반대로 생각했던 나... 눈감아) 어렵지 않은 문제라서 바로 답안을 공개하겠습니다. public func solution(_ A : inout [Int], _ K : Int) -> [Int] { // write your co.. 2022. 10. 23.
728x90