Algorithm
-
[ 2018 KAKAO BLIND RECRUITMENT 1차] 프렌즈4블록도움말Algorithm/프로그래머스 2020. 9. 4. 18:04
문제 https://programmers.co.kr/learn/courses/30/lessons/17679 코딩테스트 연습 - [1차] 프렌즈4블록 프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 프렌즈4블록. 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙�� programmers.co.kr 처음에는 BFS로 풀 수 있는 문제인가 했지만 아래 그림과 같이 4칸 씩 되어 있는 것만 지울 수 있고 board의 사이즈가 작기 때문에 for문을 중첩해서 확인하면서 찾는 편이 나을 것이라 생각했다. Code
-
[ 2018 KAKAO BLIND RECRUITMENT ] 뉴스 클러스터링Algorithm/프로그래머스 2020. 9. 2. 15:48
뉴스 클러스터링 https://programmers.co.kr/learn/courses/30/lessons/17677 코딩테스트 연습 - [1차] 뉴스 클러스터링 뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브�� programmers.co.kr 자카드 유사도는 원소의 중복을 허용하는 다중집합에 대해서 확장할 수 있다. 다중집합 A는 원소 1을 3개 가지고 있고, 다중집합 B는 원소 1을 5개 가지고 있다고 하자. 이 다중집합의 교집합 A ∩ B는 원소 1을 min(3, 5)인 3개, 합집합 A ∪ B는 원소 1을 max(3, 5)인 5개 가지게 된다. 다중집합 ..
-
[ 2018 KAKAO BLIND RECRUITMENT ] 추석 트래픽Algorithm/프로그래머스 2020. 8. 29. 22:51
문제 https://programmers.co.kr/learn/courses/30/lessons/17676 코딩테스트 연습 - [1차] 추석 트래픽 입력: [ 2016-09-15 20:59:57.421 0.351s, 2016-09-15 20:59:58.233 1.181s, 2016-09-15 20:59:58.299 0.8s, 2016-09-15 20:59:58.688 1.041s, 2016-09-15 20:59:59.591 1.412s, 2016-09-15 21:00:00.464 1.466s, 2016-09-15 21:00:00.741 1.581s, 2016-09-15 21:00:00.748 programmers.co.kr 파싱 후에 계산을 어떻게 해야할지 고민을 많이 한 문제였다. 문제에서 2016-0..
-
[ C++ ] 1918 - 후위표기식Algorithm/백준 2020. 7. 1. 16:48
풀이 과정 1. A-Z가 오면 ex에 담습니다. 2. A-Z가 아닌 연산자가 오면 stack에 쌓습니다. 3. ( 조건을 만족하는 동안 계속 ) stack의 맨 위 연산자가 새로 들어오는 연산자보다 가중치가 높거나 같으면 ex에 옮겨담습니다. 4. '(' 가중치에 상관 없이 무조건 stack에 쌓는다. 5. ')'를 만나면 '(' 위에 있는 모든 연산자를 ex에 옮긴다. (A+B*C-D) → ABC*+D- 이 반례에서 문제가 생겨서 보니까 3번 과정의 조건을 만족하는 동안 계속 진행해줘야 해서 문제가 발생했다. Code #pragma warning(disable:C4996) #include #include #include #include using namespace std; char cmd[105]; c..
-
[ C++ ] 2718 - 타일 채우기Algorithm/백준 2020. 6. 10. 21:13
문제의 대분류를 보면 비트마스킹과 DP로 되어있다. 하지만 아무리 생각을 해도 DP로는 어떻게 풀어야할지 몰라서 재귀를 이용해서 문제를 푸는 방법으로 접근하였다. 4 x 2인 경우 아래와 같이 5가지로 나올 수 있다. 위의 5가지 경우를 보면 현재 상태에 따라서 다음 상태가 어떻게 나올 수 있는지 알 수 있다. 이를 토대로 나올 수 있는 경우의 수를 계산하면 아래와 같다. 이를 토대로 코드를 작성하고 메모이제이션을 이용하면 시간을 줄일 수 있다.
-
[ Summer/Winter coding 2019 ] 종이접기Algorithm/프로그래머스 2020. 5. 19. 22:04
어떻게 접근할까 하다가 종이를 직접 접어보았다. 이를 list로 표현해보면 중간을 기준으로 양 옆이 모양은 대칭이지만 숫자는 반대로 이루어져 있다. n = 1 : [ 0 ] n = 2 : [ 0 0 1 ] n = 3 : [ 0 0 1 0 0 1 1 ] n = 4 : [ 0 0 1 0 0 1 1 0 0 0 1 1 0 1 1 ] Code def solution(N): answer = [0] for i in range(1, N): temp = [] for j in range(0,len(answer)): temp.append(answer[j]) temp.append(0) answer.reverse() for j in range(0,len(answer)): if (answer[j] == 0): temp.appen..
-
[ 2019 KAKAO BLIND RECRUITMENT ][ C++ ] 오픈채팅방Algorithm/프로그래머스 2020. 5. 7. 18:22
stringstream 을 이용하면 C의 strtok와 같이 공백 문자를 기준으로 string을 자를 수 있다. 이를 사용하기 위해서는 #include sstream 를 선언해야 한다. 이 문제를 풀 때 가장 고민했던 점이 공백 문자를 기준으로 문자열을 어떻게 쉽게 나눌 수 있을까 였는데 strtok를 쓰는 것보다 stringstream 클래스를 이용하면 문자열 처리가 쉬워진다. Code Strtok를 사용하는 방법 #include #include #include #include #include using namespace std; map m; vector rec; // 문자열 자르기 void splite(vector record) { char *str = new char[100]; for (int i ..
-
[ c++ ][ Python ] 퇴사Algorithm/백준 2020. 4. 30. 17:31
처음에 문제를 읽고나서 가장 먼저 든 생각은 DFS면 풀리겠다 였다. 생각대로 i번째 날짜에서 상담을 하는 경우와 하지 않는 경우로 나누면 답을 빨리 구할 수 있었다. 이 경우 N이 최대 15이기 때문에 재귀로 문제를 풀어도 문제가 발생하지 않는다. DFS code C++ #include #define MAXSZ 17 using namespace std; int N, res = -1; int day[MAXSZ]; int price[MAXSZ]; void solve(int cur, int sum) { if (cur == N) { if (res N) return; solve(cur + 1, sum); solve(cur + day[c..