본문 바로가기

Algorithm

(2139)
(C++) - 백준(BOJ) 1015번 : 수열 정렬 답 www.acmicpc.net/problem/1015 1015번: 수열 정렬 P[0], P[1], ...., P[N-1]은 0부터 N-1까지(포함)의 수를 한 번씩 포함하고 있는 수열이다. 수열 P를 길이가 N인 배열 A에 적용하면 길이가 N인 배열 B가 된다. 적용하는 방법은 B[P[i]] = A[i]이다. 배열 A가 주 www.acmicpc.net stl sort를 이용해 푼 brute force문제였습니다. 풀이방법 1. 입력받은 수를 오름차순으로 정렬합니다. 2. 정렬한 후 각 수가 어디로 이동했는지 원래 배열과 정렬된 후의 배열을 비교해 찾았다면 해당 index를 넣어줍니다. 이 때 같은 수가 계속해서 있을 수 있으므로 해당 index를 check했다는 의미로 1로 만들어주어 같은 index를 정..
(C++) - 프로그래머스(고득점 kit - Greedy) : 구명보트 programmers.co.kr/learn/courses/30/lessons/42885 코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr two pointer로 구현한 문제였습니다. 풀이방법 1. 사람 몸무게를 내림차순으로 정렬합니다. 2. 구명보트를 배치합니다. 2-1. 가장 몸무게가 무거운 사람을 l번째로 가벼운 사람은 r번째 사람으로 정의합니다. 2-2. people[l] + peple[r] > limit이라면 몸무게 제한을 초과합니다. 이 때는 r을 옮기더라도 가장 작은수가 r..
(C++) - 백준(BOJ) 7579번 : 앱 답 www.acmicpc.net/problem/7579 7579번: 앱 입력은 3줄로 이루어져 있다. 첫 줄에는 정수 N과 M이 공백문자로 구분되어 주어지며, 둘째 줄과 셋째 줄에는 각각 N개의 정수가 공백문자로 구분되어 주어진다. 둘째 줄의 N개의 정수는 현재 활 www.acmicpc.net top down dp로 푼 문제였습니다. 풀이방법 1. 두 가지의 상태로 나누어집니다. 1-1. 현재 앱을 놔두는 경우에는 현재 남는 메모리는 그대로입니다. 1-2. 비활성화하는 경우. 현재 남는 메모리 = 현재 남는 메모리 - 현재 앱을 다시 실행할 경우의 cost입니다. 2. dp 점화식을 세웁니다. d 배열을 선언합니다. i번째 어플의 남은메모리 j로 확보할 수 있는 메모리양으로 정의될 수 있습니다. i번째 앱에..
(C++) - 프로그래머스(연습문제) : 가장 큰 정사각형 찾기 dpprogrammers.co.kr/learn/courses/30/lessons/12905 코딩테스트 연습 - 가장 큰 정사각형 찾기 [[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] 9 programmers.co.kr dp문제였습니다. 풀이방법 1. 배열 d를 정의합니다. : (i,j) 위치에서 정사각형이 되는 최대 한 변의 길이 다음과 같이 1,1의 위치에서의 정사각형을 만들 수 있는 최대 한 변 길이는 다음과 같은 세 방향으로부터의 값 중 최소가 됩니다. 2. 점화식을 세웁니다 : 현재 i,j위치가 1이라면 정사각형의 한 변의 길이를 넓혀 볼 수 있습니다. 넓힐때는 다음과 같이 정사각형의 특성상 영향을 받는 노란색의 나머지 세 위치로부터 값들의 최소를 뽑은 뒤 + 1을 해주..
(C++) - 프로그래머스(연습문제) : 124 나라의 숫자 programmers.co.kr/learn/courses/30/lessons/12899 코딩테스트 연습 - 124 나라의 숫자 programmers.co.kr 몫과 나머지를 이용한 수학 문제였습니다. 풀이방법 이 나라의 한 자리 수는 3개의 수로 표현됩니다. 10진수에서 10을 나눈 나머지는 곧 가장 오른쪽 한 자리의 수를 의미합니다. 3으로 나눈 나머지가 이 나라의 1자리이므로 10진수를 3씩 나누어 조건을 확인한 뒤, 해당 나라의 숫자로 한 개씩 문자를 추가해줍니다. Code #include using namespace std; string solution(int n) { string answer = ""; int num = n; while(num){ if(num % 3 == 0) answer = "..
(MYSQL) - 프로그래머스 (SQL 고득점 kit - SUM,MAX,MIN) : 최댓값 구하기 programmers.co.kr/learn/courses/30/lessons/59415 코딩테스트 연습 - 최댓값 구하기 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr 정렬 속성을 이용해 푼 문제였습니다. 풀이방법 ASC : ORDER BY의 default 속성입니다. selecet된 column을 오름차순으로 정렬합니다. DESC : selecet된 column을 내림차순으로 정렬합니다. 1. ORDER BY를 이용합니다. FROM ..
(C++) - 백준(BOJ) 12813번 : 이진수 연산 www.acmicpc.net/problem/12813 12813번: 이진수 연산 총 100,000 비트로 이루어진 이진수 A와 B가 주어진다. 이때, A & B, A | B, A ^ B, ~A, ~B를 한 값을 출력하는 프로그램을 작성하시오. www.acmicpc.net 간단한 문자열 처리 문제였습니다. 풀이방법 1. 각 연산마다 함수를 선언해 구현했습니다. Code #include using namespace std; string andOp(string a,string b){ string tmp = ""; for(int i = 0; i < a.size(); i++){ if(a[i] == b[i] && a[i] == '1') tmp+="1"; else tmp += "0"; } return tmp; } s..
(C++) - 백준(BOJ) 12852번 : 1로 만들기 2 답 www.acmicpc.net/problem/12852 12852번: 1로 만들기 2 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 자연수 N이 주어진다. www.acmicpc.net bottom up dp로 풀었습니다. 풀이방법 1. 1로 시작하여 n을 만드는 것으로 생각했습니다. 따라서 문제의 해당 조건에서 반대로 다음 수를 만들게 됩니다. 즉, 1을 빼는 것은 1을 더하는 것, 나누기 2하는 것은 2를 곱하는 것, 나누기 3하는 것은 3을 곱하는 것이 되게 됩니다. 이 때 3가지의 경우로 수를 만들 수 있습니다. 1) 1을 더하는 것 i + 1이라는 숫자를 만드는 방법의 수 = i라는 수를 만드는 방법 개수 + 1 2) 2를 곱하는 것 i * 2 이라는 숫자를 만드는 방법의 수 = i라는 수..