프로그래머스 54

[프로그래머스] 깊이/너비 우선 탐색(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 < ..

[프로그래머스] 코딩테스트 연습 2019 KAKAO BLIND RECRUITMENT 오픈채팅방 with Swift

안녕하세요! 오늘은 프로그래머스 2레벨 오픈채팅방 문제를 풀어볼건데요! 지난주 주말에 1레벨 문제를 다 풀어버려서 1레벨테스트를 한 결과 쉽게 통과했습니다! 2레벨도 꾸준히 다 풀어보고 합격 이미지 올려드릴게요! SWEA A형도 있는데 바로 2레벨부터 갈까 후회(매일 1문제이상 1레벨부터 풀기로 해서 시간이 오래걸려요)중이긴 합니다 ㅠ ㅎㅎ 오늘은 자랑은 여기까지하고! 바로 문제 풀이 들어가겠습니다! 오픈 채팅방 문제는 제 생각에는 해쉬(딕셔너리) 문제라고 생각했습니다! 아이디와 닉네임 쌍으로 이루어져있다고 생각하면 아이디와 닉네임을 key와 value로 쓰고 싶다는 생각이 파바바밧 들더라구요! Swift의 딕셔너리는 key와 value로 이루어져 있고 키로 대괄호를 통해 접근이 가능해서 매우 사용하기 ..

[프로그래머스] 연습문제 N개의 최소공배수 with Swift

안녕하세요! 오늘은 N개의 최소공배수 문제를 풀어보았습니다! 참... 문제가 이상하다고 많이 느낀 문제였는데요! 풀고나서도 찝찝하네요! 우선 같이 풀어보시죠! N개의 최소공배수 각자 다 소수로 나눠서 그 갯수로 문제를 풀었다가 연습문제만 맞고 테스트 코드에서 틀려버려서 풀이 방법을 바꾸었습니다. 두개씩 최소공배수를 구하고 그 수로 다음수와 또 최소공배수를 구하는 방식으로 문제를 풀었습니다! 그러기 위해서는 최대공약수를 구하고 두수를 곱한다음 최대공약수로 나누면 서로의 최소 공배수가 구해지는 방법을 이용하였습니다! 이렇게 두개씩 최대공약수를 구해 마지막 배열에 저장하고 반환하면 문제가 해결됩니다! func solution(_ arr:[Int]) -> Int { var resultArr = arr var r..

[프로그래머스] 이상한 문자 만들기, 자연수 내림차순으로 배치하기, 정수 제곱근 판별 with Swift

안녕하세요! 오늘은 이상한 문자 만들기, 자연수 내림차순으로 배치하기, 정수 제곱근 판별 문제를 풀어보았습니다. 1. 이상한 문자 만들기 이상한 문자만들기는 한 단어의 홀수는 대문자 짝수는 소문자로 만들어서 푸는 문제입니다! 한 문장의 홀수와 짝수로 빠르게 문제를 풀어버리고 틀려서 고생했습니다. ㅠㅠ 문제를 푸실 때 문제를 코딩하는 시간과 비례하게 문제를 읽고 생각해보는 시간을 다들 가져보시는것도 좋습니다! 예전부터 문제만 보면 #include 부터 넣어버리는 습관을 없애야겠다고 생각했습니다! 문제를 보면 문자를 아스키코드로 바꾸고 그 글자가 소문자인지 대문자인지 판별 후 홀수번째에 대문자로 넣어주고 짝수번째에 소문자를 넣어주면 풀 수 있는 간단한 문제입니다! func solution(_ s:String..

[프로그래머스] 서울에서 김서방 찾기, 소수 찾기, 시저 암호

안녕하세요! 오늘은 서울에서 김서방 찾기, 소수 찾기, 시저 암호 문제를 풀어보았습니다! 요즘 문자열 문제를 너무 많이 풀어 문자열 달인이 될까 두렵습니다... 하핳... 이제 같이 문제를 풀어보시죠! 1. 서울에서 김서방 찾기 서울이라는 문자열배열에서 Kim과 같은 문자열을 찾고 출력해주는 것이다. for - in 구문으로 count 를 통해서 배열을 탐색합니다 그후 Kim과 문자열을 비교해서 문자열과 동일할 시 결과를 저장하고 for문을 break로 탈출하면 문제가 해결 됩니다! func solution(_ seoul:[String]) -> String { var count = seoul.count var result = "김서방은 " for i in 0.. Int { var result = 0 va..

[프로그래머스] 문자열 내 p와 y의 개수, 문자열 내림차순으로 배치하기, 문자열 다루기 기본 with Swift

안녕하세요! 오늘은 프로그래머스 문자열 내 p와 y의 개수, 문자열 내림차순으로 배치하기, 문자열 다루기 기본 세문제를 풀어보았습니다! 1. 문자열 내 p와 y의 개수 문자열 내 p, P, y, Y의 개수를 비교하는 문제입니다. String[String.index(String.startIndex, offsetBy: index)]를 이용해 문자열의 한글자씩 가져올 수 있습니다. 이를 통해 P와 p 그리고 Y와 y의 개수를 counting해 같으면 true 다르면 false를 리턴해주면 됩니다! import Foundation func solution(_ s:String) -> Bool { var ans:Bool = false var count = s.count var pCount = 0, yCount = ..