728x90 알고리즘52 [Swift 알고리즘] Codility lesson4 - PermCheck 안녕하세요 코코종입니다. 어우... 너무 간만에 돌아왔군요.. ㅋㅋㅋㅋ 진짜로 바빴습니다(암튼 진짜임) 요번 문제는 N의 크기를 가지는 배열을 주고 그것이 permutation 한지 확인하는 것이었는데요 쉽게 말해서 1~N까지의 숫자를 모두 가지고 있는지 판단하는 문제였어요 저는 배열을 돌면서 dictionary에 해당 키의 값을 1로 만들어서 체크했습니다 이후 다시 N번을 돌며 중간에 하나라도 빠져있다면 0(false)를 리턴하도록 구현했습니다. import Foundation import Glibc // you can write to stdout for debugging purposes, e.g. // print("this is a debug message") public func solution(.. 2022. 12. 6. [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. 이전 1 ··· 4 5 6 7 8 9 다음 728x90