본문 바로가기

Algorithm

(2139)
(C++) - 프로그래머스(2021 KAKAO BLIND RECRUITMENT) : 순위 검색 programmers.co.kr/learn/courses/30/lessons/72412?language=cpp
(C++) - 프로그래머스(2017 카카오 코드 본선) : 단체사진 찍기 programmers.co.kr/learn/courses/30/lessons/1835 코딩테스트 연습 - 단체사진 찍기 단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두 programmers.co.kr 순열 구현문제였습니다. 풀이방법 8!의 모든 순열을 확인하면서 data의 조건에 부합하는지를 확인하면 됩니다. 8! * 100 < 1억번 연산이므로 1초 이내로 문제를 해결할 수 있습니다. 따라서 next_permutation함수를 사용하면 됩니다. Code #include using namespace std; bool isOk(string friends, char a, c..
(C++) - 백준(BOJ) 1343번 : 폴리오미노 www.acmicpc.net/problem/1343 1343번: 폴리오미노 첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다. www.acmicpc.net greedy 문제였습니다. 풀이방법 1. '.'이 있는 좌표, 끝에 도당했다면 끝의 좌표 + 1을 queue에 저장합니다. 2. queue가 빌 때까지 다음을 수행합니다. 2-1. piv를 4개씩 보고 옮겨주면서 queue front()까지 "AAAA"를 정답 변수 ans에 붙입니다. 2-2. piv를 2개씩 보고 옮겨주면서 queue front()까지 "BB"를 정답 변수 ans에 붙입니다. 2-3. '.'을 ans에 붙입니다. 2-4. piv를 queue의 front() + 1로 갱신해줍니다. 2-5. pop(..
(C++) - 프로그래머스(2017 카카오 코드 본선) : 튜브의 소개팅 programmers.co.kr/learn/courses/30/lessons/1839 코딩테스트 연습 - 튜브의 소개팅 3 3 150 [[0, 2, 99], [100, 100, 4], [1, 2, 0]] [4, 103] 4 6 25 [[0, 1, 1, -1, 2, 4], [-1, 7, 2, 1, 5, 7], [-1, 1, -1, 1, 6, 3], [-1, 1, -1, -1, 7, 0]] [8, 15] 5 5 12 [[0, 1, 1, 1, 1], [9, 9, 9, 1, 9], [1, 1, 1, 1, 9], [1, 1, 5, 9, 9], [1, 1, 1, 1, 0]] [12, programmers.co.kr 다익스트라 문제였습니다. 풀이방법 0,0부터 시작해 s를 초과하지 않으면서 가장 짧은 경로를 찾아야 ..
(C++) - 프로그래머스(2019 카카오 개발자 겨울 인턴십) : 불량 사용자 programmers.co.kr/learn/courses/30/lessons/64064 코딩테스트 연습 - 불량 사용자 개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량 programmers.co.kr dfs 구현 문제였습니다. 풀이방법 1. 하나의 banned_id에 해당하는 user_id들을 index로 뽑아 저장합니다. 예제2의 경우 "*rodo" 에 해당하는 [0,2] index를 저장해줍니다. 마찬가지로 나머지 "*rodo", "******"에 대해 [0,2], [3,4]를 저장해줍니다. 2. 목록을 dfs로 뽑아준 후 map에 저장해줍니다. [0,2,3], [0,..
(Javascript) - 프로그래머스(2019 카카오 개발자 겨울 인턴십) : 튜플 programmers.co.kr/learn/courses/30/lessons/64065 코딩테스트 연습 - 튜플 "{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1] programmers.co.kr 문자열 처리 구현 문제였습니다. 풀이방법 1. 문자열을 정제한 뒤 만든 배열을 길이 오름차순으로 정렬합니다. 2. Map에 저장되어 있지 않은 값이 있다면 answer에 넣어줍니다. 3. answer를 반환합니다. Code function solution(s) { let answer = []; let M = new Map()..
(Javascript) - 프로그래머스(고득점 kit : 동적계획법) : N으로 표현 programmers.co.kr/learn/courses/30/lessons/42895?language=javascript 코딩테스트 연습 - N으로 표현 programmers.co.kr backtracking으로 푼 문제였습니다. 풀이방법 모든 경우의 수를 dfs를 사칙연산에 대해 계속 호출하는 방식으로 해결했습니다. Code let ans = 0x3f3f3f3f; let n, num; function dfs(depth, sum) { if (depth > 8) return -1; if (sum == num) { ans = Math.min(ans, depth); return; } let tmp = 0; for (let i = 0; i < 8; i++) { tmp = tmp * 10 + n; dfs(dep..
(C++) - 백준(BOJ) 17413번 : 단어 뒤집기 2 www.acmicpc.net/problem/17413 17413번: 단어 뒤집기 2 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 www.acmicpc.net stack이용한 구현문제였습니다. 풀이방법 3가지 경우에 단어가 stack에서 빠져나옵니다. 1. 현재 보는 문자가 ''인 경우 3. '공백' 또는 마지막 문자인 경우 1.의 경우 stack에 들어있는 문자들이 tag인 경우는 없으므로 (''가 번갈아 나오기 때문) 모두 뽑아 ans에 붙여줍니다. 2. ''포함 모두 뽑아내고 다시 뒤집어주어 원래 단어가 나오게 한 다음 ans변수..