본문 바로가기

Algorithm/Implementation

(746)
(C++) - 프로그래머스(찾아라 프로그래밍 마에스트로) : 폰켓몬 답 programmers.co.kr/learn/courses/30/lessons/1845 코딩테스트 연습 - 폰켓몬 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. programmers.co.kr 풀이방법 1. 수의 종류를 구합니다. 2. nums의 size/2와 수의 종류 중 작은 수를 반환해줍니다. Code #include #include using namespace std; int cnt[200001]; int solution(vector nums) { int answer = 0; int size = nums.size(); int category = 0; for..
(C++) - 프로그래머스(2017 팁스타운) : 짝지어 제거하기 답 programmers.co.kr/learn/courses/30/lessons/12973?language=cpp 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 programmers.co.kr 풀이방법 1. 스택이 비어있다면 push 2. 스택이 비어있지않다면 2-1. top과 현재 비교하는 문자가 같으면 pop합니다. 2-2. 다르면 stack에 push합니다. Code #include #include #include using namespace std; int solution(string s) { stack pairing; i..
(Javascript) - 프로그래머스(월간코드챌린지) : 이진 변환 반복하기 답 programmers.co.kr/learn/courses/30/lessons/70129 코딩테스트 연습 - 이진 변환 반복하기 programmers.co.kr 풀이방법 1. 문자열에서 '0'을 제거합니다. 2. 제거한 0의 개수를 세고 answer배열을 갱신합니다. 3. 기존 문자열을 남은 1의 길이를 이진법으로 바꾼 문자열로 바꾸고 '1'인지 비교합니다. 4. 갱신된 문자열이 '1'이라면 루프를 탈출해 반환합니다. Code function removeZero(convertedWord, answer) { let tmp = ""; for (let i = 0; i < convertedWord.length; i++) { if (convertedWord[i] !== "0") tmp += convertedWord..
(C++, Javascript) - 프로그래머스(Summer/Winter Coding(~2018)) : 소수만들기 programmers.co.kr/learn/courses/30/lessons/12977 코딩테스트 연습 - 소수 만들기 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 programmers.co.kr 소수 판별, 조합 구현 문제였습니다. 풀이방법 1. 3개의 수를 조합(순서 상관 O)으로 뽑은 후 세 수를 더한 값을 구합니다. 2. 해당 값으로 미리 1만까지의 자연수에 대한 소수여부를 판별한 배열과 대조해 소수여부를 판별합니다 : 에라토스테네스의 체 (시간복잡도 O(N루트N)) Code C++ #include #include using namespace..
(C++) - 프로그래머스(월간코드챌린지) : 쿼드압축 후 개수 세기 programmers.co.kr/learn/courses/30/lessons/68936 코딩테스트 연습 - 쿼드압축 후 개수 세기 [[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]] [4,9] [[1,1,1,1,1,1,1,1],[0,1,1,1,1,1,1,1],[0,0,0,0,1,1,1,1],[0,1,0,0,1,1,1,1],[0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,1],[0,0,0,0,1,0,0,1],[0,0,0,0,1,1,1,1]] [10,15] programmers.co.kr 재귀함수를 구현하는 문제였습니다. 풀이방법 1. 부분 정사각형의 면적이 모두 같은 영역인지 확인합니다. 2. 정사각형의 영역이 모두 같은 수(0,1)로 되어 있다면 압축이 가능합니다. 반대..
(Javascript) - 프로그래머스(2019 카카오 겨울 인턴) : 징검다리 답 programmers.co.kr/learn/courses/30/lessons/64061 코딩테스트 연습 - 크레인 인형뽑기 게임 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4 programmers.co.kr 구현하는 문제였습니다. 풀이방법 1. 인형을 뽑을 때의 위치(행)를 구한다. 2. 뽑은 인형을 배열에 담고 연속인지 판별해 상태를 갱신한다. 3. 답출력 Code function getDollPos(board,oneMove){ for(let i = 0; i < board[0].length; i++){ if(board[i][oneMove]) return i; } return -1; } function u..
(C++) - 백준(BOJ) 15686번 : 치킨배달 답 www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 비트마스킹을 이용해 m개 이하의 치킨집을 연 후 치킨거리를 게산하여 최솟값을 출력하는 문제였습니다. 풀이방법 시간복잡도 : (살릴 치킨집을 고르는 시간) * (다 고른 후 도시의 치킨 거리를 구하는 시간) = (2^m) * n^2 1. n^n의 격자에서 입력 받을 때 집의 좌표와 치킨집의 좌표를 각자 저장합니다. 2. 비트마스킹을 이용해 치킨집이 열려있는 상태를 표시할 수 있습니다. 2-1..
(C++) - 백준(BOJ) 17219번 : 비밀번호 찾기 답 www.acmicpc.net/problem/17219 17219번: 비밀번호 찾기 첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다. 두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번�� www.acmicpc.net map을 이용해 간단히 풀 수 있는 문제였습니다. 풀이방법 1. map에 site주소와 비밀번호를 key,value 쌍으로 저장합니다. 2. n만큼 찾고자하는 site주소를 key로 접근하여 value를 출력해주면 답이 됩니다. Code #include #include #include using namespace std; int main(){ map siteInfo; int m..