알고리즘 33

[프로그래머스] 정렬 H-Index with Swift

안녕하세요. 오늘은 프로그래머스 H-Index문제를 풀어보겠습니다. 이 문제가 정렬 카테고리에 있지만 정렬로 굳이 안풀어도 문제가 해결 됩니다. 우선 정렬로 문제를 해결하려면 인용횟수를 정렬시키고 h-index를 찾아가는 방법이 best이겠지만 문제 제약 조건을 보면 굳이 그럴 필요가 없어 생구현으로 문제 풀이가 가능합니다. import Foundation func solution(_ citations:[Int]) -> Int { var count:Int = Int() var hIndex = 0 while true { count = 0 hIndex += 1 for i in citations { if i >= hIndex { count += 1 } } print(count) if count < hIndex..

[프로그래머스] 월간 코드 챌린지 시즌2 괄호 회전하기 with Swift

안녕하세요. 오늘은 프로그래머스 괄호 회전하기 문제를 풀어보겠습니다. 괄호와 관련된 문제는 대부분 Stack 자료구조를 이용하면 문제를 해결하실수 있습니다. Stack은 Swift의 배열을 이용해서 append()와 removeLast()만 이용해서 사용하시면 됩니다! 이 문제도 마찬가지로 Stack 자료구조를 이용해서 문제를 풀어보겠습니다! 1. 문자열을 회전시킨다. var s1 = s[s.index(s.startIndex, offsetBy: i)...s.index(s.endIndex, offsetBy: -1)] if i != 0 { s1 += s[s.startIndex...s.index(s.startIndex, offsetBy: i-1)] } 2. push or pop 결정한다. var isPop =..

[프로그래머스] 2019 KAKAO BLIND RECRUITMENT 후보키 with Swift

안녕하세요. 오늘은 프로그래머스 후보키 문제를 풀어보겠습니다! 후보키 문제는 여러가지 알고리즘을 섞어만든 문제인데요! 코딩테스트 연습 - 후보키 [["100","ryan","music","2"],["200","apeach","math","2"],["300","tube","computer","3"],["400","con","computer","4"],["500","muzi","music","3"],["600","apeach","music","2"]] 2 programmers.co.kr row&column이 max 8*20이기 때문에 어떤 방법으로해도 전략만 잘 세운다면 시간초과날 일은 없을듯합니다! 처음에는 재귀알고리즘을 이용하여 combination을 하여 후보키 후보조합을 만들어줍니다! 이 후 sort..

[프로그래머스] 2017 팁스타운 예상 대진표 with Swift

안녕하세요! 오늘은 프로그래머스의 예상 대진표 문제를 풀어보겠습니다! 코딩테스트 연습 - 예상 대진표 △△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N programmers.co.kr 이 문제는 tree의 공통 부모 노드를 찾는 문제입니다! 대진표가 완전 이진트리여서 동일한 부모노드가 나올때까지 ÷2 로 나누어주시면 됩니다! 그러기 위해서는 각각의 Index를 이진트리에 맞춰주어야하는데요. n이 2^x 이기 때문에 n - 1 + a, n - 1 + b로 인덱스를 바꾸어주시면 됩니다! import Foundation func solution(_ n:I..

[프로그래머스] 2019 카카오 개발자 겨울 인턴십 튜플 with Swift

안녕하세요. 오늘은 프로그래머스 2레벨 튜플 문제를 풀어보겠습니다! 이 문제는 튜플을 표현하는 집합이 주어지면 튜플을 만들어내면 되는 문제입니다! 그러기 위해서 처음에는 튜플을 표현하는 집합을 배열로 옮겨줍니다! seperatedBy와 components 메소드를 사용하면 쉽게 배열로 옮기실 수 있습니다. 그 후 집합중 집합의 사이즈가 1부터 N까지 있는데 거기에서 이전 집합을 차집합해주면 n번째 튜플인자가 나옵니다. 과정에서 for문이 지나치게 겹치기 때문에 차집합은 메소드로 구현하였습니다. 참고로 중복이 허용되기 때문에 차집합 과정에서 Set를 사용하지 못하였습니다! import Foundation func difference(_ integerArray1:[Int], _ integerArray2:[I..

[프로그래머스] 2020 카카오 인턴십 수식 최대화 with Swift

안녕하세요. 프로그래머스 2레벨 문제 수식 최대화 문제를 풀어보았습니다. 지난번에는 조합문제를 풀어보았던 기억이 있는데 이번엔 순열문제입니다! 조합과 순열은 순서가 상관있냐 없냐 차이이기 때문데 재귀에서 0부터 시작하냐 index부터 시작하냐만 다를 뿐 똑같습니다. 차후에 알고리즘으로 다루도록하겠습니다!(sort, dfs/bfs, 순열과 조합이 밀려있네요 허헣...) 1. 숫자와 연산자를 나눈다! 각각 배열에 담습니다! for character in expression { if let integer = Int(String(character)) { number = number * 10 + Int64(integer) } else { numbers.append(number) number = 0 operator..

[프로그래머스] 2021 카카오 채용연계형 인턴십 거리두기 확인하기 with Swift

안녕하세요! 오늘은 프로그래머스 2레벨 거리두기 확인하기 문제를 풀어보겠습니다! 이번 문제는 맨허튼 거리를 이용해서 거리를 확인하는 문제입니다! 소스 코드량(함수로 안만들어서 뻥튀기된 부분이 있어요 ㅠㅠ)에 비해서 생각보다 문제가 쉬우니 다들 풀어보시기 바랍니다! 우선 이 문제는 사람이 앉은 포인트를 잡아서 맨허튼 거리 2안에서 사람이 또 있는지 없는지를 확인하는 문제입니다! 장애물도 있기 때문에 일반적인 거리측정방법말고 DFS나 BFS를 이용해야합니다. 저번에 DFS로 문제를 풀었던게 있어서 BFS로 문제를 풀어보겠습니다! 우선 BFS에 쓸 Queue가 필요한데 Swift에는 기본적으로 지원해주는 Queue가 없으니 대충 만들어 씁시다! Queue도 거리가 2까지이다 보니 Queue도 완벽하게 구현할 ..

[프로그래머스] 2020 KAKAO BLIND RECRUITMENT 괄호 변환 with Swift

안녕하세요! 오늘은 프로그래머스 2레벨 괄호 변환 문제를 풀어보겠습니다! 이번 문제는 문제를 보고 살짝 겁을 먹었는데요. 문제에서 시키는대로 하면 이상없이 문제가 잘 풀리더라구요! 문제 풀이를 보시기 전에 겁먹지 마시구 한번 더 돌아가서 문제에서 시키는 대로 해보시면 좋을듯 합니다! 0. 우선 문제가 재귀 형식을 이루어져 있기 때문에 function하나를 만듭니다. 1. 입력이 빈 문자열인 경우, 빈 문자열을 반환합니다. if w.isEmpty { return "" } 2. 문자열 w를 두 "균형잡힌 괄호 문자열" u, v로 분리합니다. 단, u는 "균형잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 하며, v는 빈 문자열이 될 수 있습니다. var balance = 0 var splitIndex = 0..

[프로그래머스] 코딩테스트 연습 2021 Dev-Matching: 웹 백엔드 개발자(상반기) 행렬 테두리 회전하기 with Swift

안녕하세요! 오늘은 프로그래머스 행렬 테두리 회전하기 문제를 풀어보겠습니다! 행렬 테두리 회전하기 문제는 문제를 읽어봤을때 제약조건에 의해 모두 문제대로 구현만해도 time over가 아니기 때문에 모두 구현하여 풀었습니다.(한시간정도 걸렸네요... ㅠ) 문제를 풀때 4부분으로 나누어 옮겼습니다. 각각 배열을 만들어 배열에 넣어놓고 꺼내면서 다시 배치하였습니다. 위 그림처럼 나눴고 저것을 다시 재배치하였습니다. 과정에서 min값을 찾아서 answer 배열에 넣어놓고 return해준다면 문제가 해결됩니다. import Foundation func solution(_ rows:Int, _ columns:Int, _ queries:[[Int]]) -> [Int] { var leftSide:[Int] = [] ..

[프로그래머스] 코딩테스트 연습 2017 팁스타운 짝지어 제거하기 with Swift

안녕하세요! 오늘은 프로그래머스 2레벨 짝지어 제거하기 문제를 풀어보겠습니다. 이 문제는 Stack 자료구조를 이용하여 문제를 풀 수 있습니다. Stack은 first in last out구조로 배열로도 쉽게 구현가능하기 때문에 배열로 문제를 해결하였습니다. stack에 입력된 문자열을 하나하나 입력해주면서 직전 입력과 같다변 pop해주게 된다면 문제가 해결됩니다. import Foundation func solution(_ s:String) -> Int{ var characterStack: [Character] = [Character]() for character in s { if !characterStack.isEmpty && characterStack.last! == character { chara..