전체 글 68

[프로그래머스] 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..

[자료구조] Linked List 연결리스트(1) with C

안녕하세요! 오늘은 저번에 예고했던대로 Linked List에 대해서 포스팅합니다. Linked List(이하 LL)는 배열의 기능적 업그레이드 버젼이라고 할 수 있습니다! 우선 설명 전 배열의 장단점을 이야기 해봅시다! 1. 배열의 장점 배열은 접근 속도가 빠릅니다! 연속적인 데이터의 나열이기 때문이죠! 또, 배열은 구현이 굉장히 쉽습니다! 2. 배열의 단점 배열은 중간 삽입, 삭제가 매우 어렵습니다! 특히 맨앞의 배열은 삭제시 뒤의 데이터를 일일이 한칸씩 앞당겨줘야합니다! 또한, 크기를 바꾸기 힘듭니다! 왜냐면 배열은 연속된 데이터의 나열이기 때문에 미리 크기를 정하고 메모리에 저장 장소가 잡히기 때문입니다! 그래서 만약에 바꾸고 싶다면 메모리에 새로운 배열을 만들어 데이터를 옮겨줘야합니다! 이러한 ..

[프로그래머스] 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 ..

[프로그래머스] 코딩테스트 연습 힙(Heap) 더 맵게 with C++

안녕하세요. 오늘은 프로그래머스 더 맵게 문제를 풀어보겠습니다. 더 맵게는 데이터중에서 가장 작은 숫자를 가져오는 시간이 중요한 문제입니다. 데이터 자체가 완벽하게 정렬이 되어있지 않더라도 항상 가장 작은 숫자를 가져오기 편한 자료구조를 생각해보면 힙(HEAP)이 있습니다. priority_queue자료구조를 사용해도 되지만 저는 예전에 만들어 놓은 힙 자료구조가 있길래 가져와 봤습니다! C로 구현된 자료구조라 OOP가 아니라 코딩하는데 익숙하지 않더라구요 허헣.... 다음에 자료구조 모두 C++로 만들어 놔야겠네요 ㅠ 더 맵게 문제는 힙을 이용해 가장 작은 두 수를 가져와서 합쳐서 다시 힙에 넣는걸 반복하면서 모든 값이 K이상임을 확인해주면 됩니다. 제가 구현한 힙은 가장 작은값이 1번 인덱스에 오기때..

[프로그래머스] 코딩테스트 연습 Summer/Winter Coding(2019) 멀쩡한 사각형 with Swift

안녕하세요. 오늘은 프로그래머스 멀쩡한 사각형 문제를 풀어보겠습니다! 이 문제 풀다가 머리가 터질뻔했는데요... 중고딩때 도형문제를 더 공부했더라면 수월하게 풀었을듯합니다 ㅠㅠ 결과적으로 보면 풀이가 참 간단합니다! 우선 서로가 최대공약수가 없는 도형(가로지르는 선이 정수인 n,m의 (n,m)인 지점을 지나게 하지 않기 위해)에서 w+h-1이 망가지는 도형의 수이다! 그러므로 최소공배수를 구해 도형을 쪼개고 w+h-1을 구하고 최소공배수를 다시곱해 전체 블록의 갯수에서 빼시면 문제를 해결하실 수 있습니다! import Foundation func gcd(_ a: Int64, _ b: Int64) -> Int64 { if b == 0 { return a } else { return gcd(b, a%b) }..

[프로그래머스] 코딩테스트 연습 2017 카카오코드 본선 단체사진 찍기 with C++(brute force)

안녕하세요! 오늘은 프로그래머스 단체사진 찍기 문제를 풀어보겠습니다. 이 문제는 제 기준에선 참 문제를 이해하기 어렵게 만들었다고 생각했는데요. 왜냐면 일렬로 선다고 해놓고 나란히 선다고 하고 저는 전체 경우의 수가 시그마n=1to8 8P(8-n)*n^(8-n)개인줄 알았습니다... 그래서 레벨2에도 엄청난 수열문제가 나올 수 있구나... 이런 마음이였는데요 다행히 그건아니고 최대 8!개를 탐색하는 문제였습니다! 또, 맞왜틀(맞는데 왜 틀리지?!) 문제입니다! 한 session에 하나의 testcase가 아니라 여러 testcase가 들어있어 전역 변수를 초기화 해주지 않으면 오답이 됩니다! 모두 구현한 뒤 오답이길레 한참 헤맸습니다 ㅠㅠ 잡설은 이쯤하고! 같이 문제 풀어보시죠! 알고리즘은 brute f..

[프로그래머스] 코딩테스트 연습 2017 카카오코드 예선 카카오프렌즈 컬러링북 with C++

안녕하세요! 오늘은 프로그래머스 카카오프렌즈 컬러링북 문제를 풀어보았습니다! 2레벨은 문제가 몇개 안되 C++문제도 같이 풀려고합니다! Swift로 풀어보고 싶었으나 어쩔 수 없죠 ㅠ 이 문제는 기본적인 탐색 문제입니다! bfs(Breadth First Search)나 dfs(Depth First Search) 중 사용하면 되는데요! 서로 장단점이 있는 알고리즘입니다! 나중에 포스팅으로 dfs와 bfs에 대해 자세히 포스팅 하도록하겠습니다! 저는 dfs로 문제를 풀었는데요! 같이한번 살펴보시죠! 우선 인자로 들어온 vector picture 를 함수 내부에서 사용하기 좋게 전역변수로 선언한 map으로 옮겨줍니다! 옮겨주면서 isVisitedMap도 같이 초기화해줍니다! for(int i = 0; i < ..