프로그래머스 54

[프로그래머스] 월간 코드 챌린지 시즌1 이진 변환 반복하기 with Swift

안녕하세요. 오늘은 이진변환 반복하기 문제를 풀어보겠습니다. 이진 변환 문제는 간단한 문자열 문제입니다. 문제에서 제시한 방법으로 0을 지우면서 지워진 0의 갯수를 count하고 이진변환의 횟수를 count해주면 됩니다. import Foundation var countZero = 0 func binaryTranform(_ string:String) -> String { var count = 0 for element in string { if element == "1" { count += 1 } else { countZero += 1 } } var binary = "" while(count != 0) { if count % 2 == 1 { binary = "1" + binary } else { binar..

[프로그래머스] 2018 KAKAO BLIND RECRUITMENT [1차] 캐시 with Swift

안녕하세요! 오늘은 프로그래머스 캐시 문제를 풀어보도록 하겠습니다. 캐시 문제는 LRU 알고리즘을 이용하여 문제를 해결하라고 나와있는데요! LRU 알고리즘에 대해서 간단히 소개하자면 가장 최근에 쓰인 데이터를 캐시에 담아두는 것입니다. 기본적으로 캐시는 queue형태로 이루어져있지만 캐시 hit인 경우에는 해당 캐시만 뒤로 이동됩니다. 이제 문제를 풀어보겠습니다! 우선 사용할 캐시큐와 실행시간을 선언해줍니다! var cacheQueue:[String] = [String]() var executeTime:Int = 0 대소문자와 상관없으니 모두 대문자로 취급하고 for문으로 입력을 해줍니다. for city in cities { let city = city.uppercased()func solution(_..

[프로그래머스] 위클리 챌린지 전력망을 둘로 나누기 with Swift

안녕하세요😀 오늘은 프로그래머스 전력망을 둘로 나누기 문제를 풀어보겠습니다! 코딩테스트 연습 - 전력망을 둘로 나누기 9 [[1,3],[2,3],[3,4],[4,5],[4,6],[4,7],[7,8],[7,9]] 3 7 [[1,2],[2,7],[3,7],[3,4],[4,5],[6,7]] 1 programmers.co.kr 전력망을 둘로 나누기 문제는 완전탐색을 이용해서 풀었습니다. 최대 노드 갯수가 100개이기 때문에 bfs알고리즘으로 풀 경우 최악의 상황에서 O(n * nlogn) 의 시간이 걸리기 때문에 시간제한이 걸리진 않을듯 합니다! 이제 문제를 풀어보겠습니다! wireGraph와 isVisitedNode를 선언하고 완전탐색이므로 전력망을 둘로 나누기 위해 wire를 자르는데 모든 와이어를 한번씩 ..

[프로그래머스] 위클리 챌린지 교점에 별 만들기 with Swift

안녕하세요. 오늘은 프로그래머스 교점에 별 만들기를 풀어보도록 하겠습니다. 코딩테스트 연습 - 교점에 별 만들기 [[2, -1, 4], [-2, -1, 4], [0, -1, 1], [5, -8, -12], [5, 8, 12]] ["....*....", ".........", ".........", "*.......*", ".........", ".........", ".........", ".........", "*.......*"] [[0, 1, -1], [1, 0, -1], [1, 0, 1]] ["*.*"] [[1, -1, 0], [2, -1, 0], [4, - programmers.co.kr 이 문제는 참고 사항에 문제 해결방법이 대부분 나와있습니다. Ax + By + E = 0 Cx + Dy + ..

[프로그래머스] Summer/Winter Coding(~2018) 영어 끝말잇기 with Swift

안녕하세요. 오늘은 프로그래머스 영어 끝말잇기 문제를 풀어보겠습니다. 코딩테스트 연습 - 영어 끝말잇기 3 ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"] [3,3] 5 ["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"] [0,0] programmers.co.kr 영어 끝말잇기 문제는 딕셔너리의 활용으로 간단하게 문제를 해결할 수 있습니다. 빈 딕셔너리와 이전 단어를 저장할 수 ..

[프로그래머스] 월간 코드 챌린지 시즌1 삼각 달팽이 with Swift

안녕하세요. 오늘은 프로그래머스 삼각 달팽이 문제를 풀어보겠습니다. 코딩테스트 연습 - 삼각 달팽이 5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11] programmers.co.kr 삼각 달팽이 문제는 완전 생 구현으로 문제를 해결하였습니다. 따로 알고리즘을 적용하여 문제를 푸는 방법은 생각해보지 않았습니다. 우선 삼각 달팽이를 그려줄 2중 배열을 만들어줍니다. var snailArray:[[Int]] = [[Int]](repeating: [Int](repeating: 0, count: n), count: n) 여기에 데이터를 넣고 0 이 아닌 경우만 answer배열에 다시 집어 ..

[프로그래머스] 월간 코드 챌린지 시즌2 2개 이하로 다른 비트 with Swift

안녕하세요. 오늘은 프로그래머스 2개 이하로 다른 비트 문제를 풀어보겠습니다. 코딩테스트 연습 - 2개 이하로 다른 비트 programmers.co.kr 이 문제는 비트연산 문제입니다. 문제의 제약조건을 보고 문제대로 풀다간 답이 없다 생각하고 다른 방법을 생각해보았습니다. 우선 짝수일때는 + 1을 하면 되는데 홀수 일때 어떻게 해야하는지가 고민이였습니다. 알고보니 짝수 홀수 상관없이 2진수로 바꿨을때 가장 낮은 자릿수의 0을 찾아 1로 바꿔주고 그 아래 자리의 1을 0으로 바꿔주면 되는 문제였습니다. 짝수일 때는 그 아래 자리의 0이 없으므로 해당 자리만 1로 바꿔줍니다. 실제로 코드로 짤때는 answer + 1 - ( 1 / 2 ) 이므로 1 / 2가 0으로 처리되므로 홀짝을 나눠줄 필요는 없습니다...

[프로그래머스] 2018 KAKAO BLIND RECRUITMENT [1차] 프렌즈4블록 with Swift

안녕하세요. 오늘은 프로그래머스 프렌즈4블록 문제를 풀어보겠습니다. 코딩테스트 연습 - [1차] 프렌즈4블록 프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙 programmers.co.kr 이 문제는 구현 문제입니다. 제약조건에 의하여 문제에서 주어진 대로 풀어도 시간초과가 나지 않습니다. 있는 그대로 구현 해보도록 하겠습니다. 첫번째로 우선 지워질 블록을 선택합니다. 또, 지워질 블록이 없다면 탈출하는 조건도 만들어줍니다! var canExit = true for i in 0..

[프로그래머스] 위클리 챌린지 피로도 with Swift

안녕하세요. 오늘은 프로그래머스 피로도 문제를 풀어보겠습니다. 코딩테스트 연습 - 피로도 XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던 programmers.co.kr 피로도 문제는 제약 조건에서 던전의 개수가 8개까지라고 하므로 완전 탐색을 하여도 시간이 초과되지 않습니다. 순서가 상관이 있으니 순열로 문제를 풀어 보도록 하겠습니다. 순열과 조합은 재귀를 이용해서 문제를 풀 수 있습니다. 재귀를 탈출조건은 모두 방문하였을때입니다. var isAllVisited = true for i in isVisited { if i == 0 { isAllVisited =..

[Algorithm] DFS/BFS stack과 queue를 이용한 완전탐색 알고리즘

안녕하세요. 오늘은 DFS와 BFS알고리즘에 대해서 알아 보겠습니다. DFS와 BFS는 그래프의 완전탐색 알고리즘입니다. 시간복잡도 두 알고리즘의 시간 복잡도에 대해서 먼저 설명드리겠습니다. 인접리스트형식으로 표현된 그래프와 인접행렬법으로 표현된 그래프에서의 시간복잡도는 다릅니다. 우선 인접행렬법(V by V 행렬 : V은 정점의 개수 입니다.)에서는 O(V^2)입니다. 각각의 노드에서 모든 노드로 간선이 있는지 여부를 알아야 하기 때문입니다. 두번째로 인접리스트형식(V: 정점의 개수, E: 간선의 개수)으로 표현된 그래프에서는 O(V+E)입니다. 각각의 노드에서 다른 노드로 간선이 리스트형식으로 존재함을 알기 때문에 V+E로 모두 탐색 가능합니다. 알고리즘 설명 DFS부터 알고리즘 설명 드리겠습니다. ..