큐에 해당하는 문제지만 딱히 큐를 쓰지 않아도 되는 문제. 풀이도 어떻게 보면 큐지만 큐가 아닌것. 이번에도 커서를 이용해 풀이했다. stayList에 현재 커서의 위치보다 작은 값의 유무를 Bool로 받는 배열을 생성하고 그 배열에 false가 없을 시 커서의 위치를 +1을 한다. 배열에 false가 있을 시 출력해야 하는 위치를 변경한다. import Foundation func solution(_ priorities:[Int], _ location:Int) -> Int { var nowLocation = location var myQueue : [Int] = [] var count = 1 for item in priorities { myQueue.append(item) } var cursor = 0..
스택/큐 단계의 첫번째 문제. 자료구조를 배운사람이라면 문제를 읽으면 어떤 것을 써야할지 알것이다. 이번문제에서 쓸 자료구조는 큐이다. 다만 Swift에서 스택이나 큐는 구현되어 있지 않으므로 구조체나 클래스 혹은 배열을 써서 대신해야 한다. 원래는 구조체를 써서 구현하려고 하였으나 오히려 더 복잡해져서 배열로 큐의 원리를 구현하였다. myQueue에는 해당 작업이 완료되는데 걸리는 시간을 넣어둔다. 4 1 5 3 2 cursor는 큐에서 dequeue역할을 한다. 4 1 5 3 2 cursor cursor에 해당하는 작업보다 현재 가리키고 있는 작업시간의 이하이면 count에 1을 더하고 cursor에 1을 더한고 answer에 count를 추가한다. cursor에 해당하는 작업보다 더 크면 거기서 중..
프로그래머스 해쉬단계 마지막 문제. 이 문제에서 까먹기 쉬운것이 장르당 최대 2개까지만 추가 가능하다는 점이다. 이 점도 모르고 꽤 헤멨다. 또 이문제에서 헤멧던 것은 장르를 재생수 순서로 정렬을 하고 장르에 해당하는 인덱스 값을 가져오는것이었는데 처음에는 gernes로만 인덱스 값을 가져오려 했지만, 그 경우 노래 양이 많아지면 시간이 오래 걸려 다른 Dictionary를 만들어서 인덱스 값을 가져오게 하였다. 1. songList에 장르당 총 재생시간을 추가한다. 또 장르의 인덱스 값을 value로 가지는 idByValue를 만든다. 2. songList를 재생량 순으로 정렬. 3. songList에서 장르 순으로 인덱스 값을 가지고 있는 idByValue를 통해 plays를 재생 순으로 정렬해서 s..
Dictionary를 이용하는 문제. 처음에는 경우의 수를 생각해 반복문으로 풀으려고 했으나 그렇게 할 필요가 없이 각 종류별 옷의 수량+1을 곱한 수 마지막에 -1을 빼면 된다. Dictionary는 키값이 옷의 종류이고 value가 종류의 개수다. func solution(_ clothes:[[String]]) -> Int { var count = 1 var clothDic : [String : Int] = [:] for item in clothes { if clothDic.contains(where: { (key: String, value: Int) in return key == item[1] }){ clothDic[item[1]] = clothDic[item[1]]!+1 }else{ clothDi..
프로그래머스 2단계 문제. 생각보다 어렵지는 않다. hash대신에 Dictionary를 사용해 풀었다. phone_book를 정리한 후 Dictionary에 삽입 후 순서대로 비교한다. 단 해당 번호는 Dictionary에서 삭제해야한다. 안그러면 무조건 false가 나온다. import Foundation extension String{ func starstWith(var input : String)->Bool{ if self == input.prefix(self.count) { return true } return false } } func solution(phone_book : [String])->Bool{ var answer = true var list = phone_book.sorted() va..
https://www.acmicpc.net/problem/10870 10870번: 피보나치 수 5 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 재귀를 이용한 피보나치의 수. 딱히 설명할 것도 없는듯하다. import Foundation func fibo(n : Int)->Int{ if n == 1 { return 1 } else if n == 0{ return 0 }else{ return fibo(n: n-1) + fibo(n: n-2) } } print(fibo(n: 10))