Algorithm Problem Solving/Programmers 54

[프로그래머스] 월간 코드 챌린지 시즌3 빛의 경로 사이클 with Swift

안녕하세요. 오늘은 프로그래머스 빛의 경로 사이클 문제를 풀어보겠습니다! 빛의 경로 사이클 문제는 각각의 포인트에 대하여 모든 방향으로 지나갔는지 안 지나갔는지 확인하면서 경로의 길이를 측정하면 되는 문제입니다! 문제를 위와 같이 간소화 할 수 있는 이유는 지나간 길은 다시 돌아와 지나가기 때문에 같은 사이클이기 때문입니다. 그러기 위해서 isVisited와 Map을 만들어줍니다! x = grid[0].count y = grid.count for i in 0.. Int { if isVisited[startY][startX][startDirection] != 0 { return 0 } isVisited[startY][startX][startDirection] = 1 let nextDirection = re..

[프로그래머스] 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도 완벽하게 구현할 ..

[프로그래머스] 2018 KAKAO BLIND RECRUITMENT [1차] 뉴스 클러스터링 with Swift

안녕하세요. 오늘은 프로그래머스 2레벨 문제 뉴스클러스터링 문제를 풀어볼게요! 뉴스 클러스터링은 Set을 사용하여 교집합과 합집합을 사용할 줄 알면 되는 문제입니다! 우선 문제에서 대소문자에 대해서 같다고 하였으니 uppercased혹은 lowercased 프로퍼티를 사용하여줍니다! 그리고 str1과 str2의 Set을 만들어주면 되는데요! 중복된 string을 허용한다고 했으나 Swift의 Set에서는 중복이 허용되지 않습니다! var i:Int = 0 while true { result = String(c1) + String(c2) + String(i) i += 1 if !stringSet.contains(result) { stringSet.insert(result) break } } 이를 방지하기 ..

[프로그래머스] 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 KAKAO BLIND RECRUITMENT 메뉴 리뉴얼 with Swift

안녕하세요! 오늘은 프로그래머스 메뉴 리뉴얼 문제를 풀어보겠습니다! 무려 2일이나 걸려서 풀었는데요... 하하... 제 능력의 참담함을 느낍니다...! 하지만 문제 푸는 방법을 알고 있다면 금방 푸실 수 있습니다! 문제 푸는 흐름에 대해서 설명드리겠습니다! 1. orders에서 course로 주어진 문자열 길이와 같은 조합을 모두 구한다. - 조합을 구하기 위해서 재귀함수로 이루어진 조합 함수를 구현한다. - 인자로는 조합할 재료(order), 조합 결과 담을 배열(combination), 조합 결과(combinationResult), 조합할 결과의 길이(stringSize), 현재 조합할 재료에서 조합중인 위치(startNumber) - 재귀함수의 탈출조건으로 현재 조합중인 combinationResu..

[프로그래머스] 코딩테스트 연습 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..

[프로그래머스] 깊이/너비 우선 탐색(DFS/BFS) 타겟 넘버 with Swift

안녕하세요. 오늘은 프로그래머스 2레벨 타겟넘버 문제를 풀어보겠습니다! 타겟넘버는 전형적인 dfs문제입니다! 각각의 입력이 +와 -일때마다 달라지는 결과가 target과 같으면 결과가 1씩 증가하도록 문제를 하면 되는데요! dfs의 깊이가 입력의 Index로 작용하게 만들어 주시면 됩니다! 그리고 depth가 max일때 target과 모든 결과의 합과 비교해서 answer의 증감을 결정해 주시면 됩니다! import Foundation var result:Int = 0 var targetResult:Int = 0 var targetDepth:Int = 0 var sourceNumbers:[Int] = [Int]() var resultsNumbers:[Int] = [Int]() var answer:Int ..