Song[coding diary index]

Song 배열에 코딩 흔적 남겨두기

코테 14

[알고리즘 코딩테스트] 나만의 SQL 문법정리

1. NULL값 대체- SELECT COALESCE(Column명, null일 경우 대체값) FROM TABLE; 2. 날짜 포멧 바꾸기- DATE_FORMAT(column명,'%Y-%m-%d') AS HIRE_YMD 3. 문자열 연결- CONCAT(str1, str2, ..)4. 중복 제거SELECT COUNT(NAME) AS 'count'FROM ANIMAL_INSWHERE NAME IS NOT NULLGROUP BY NAMEORDER BY COUNT(NAME) DESCLIMIT 1; 5. with/** SUB QUERY를 이용한 방법 **/SELECT T1.*  FROM (       SELECT A.DEPTNO            , A.LOC         FROM SCOTT.DEPT A    ..

알고리즘 2025.03.17

최대공약수 / 최소공배수 알고리즘 (c++)

최대공약수 / 최소공배수 문제를 풀때 매우 유용할 것 같아서 블로그에 작성해둔다. 해당 알고리즘 문제만 나온다면 어디서든 쉽게 활용가능하니 꼭 알아두자. 유클리드 호제법 유클리드 호제법이란, 정수 A, B 그리고 이들의 나머지값 R이 있다고 할때,(A % B = R)A, B의 최대공약수가 B, R의 최대공약수와 같다는 원리이다. 이때, A와 B의 대소비교는 중요하지 않음. 10 % 15 = 1015 % 10 = 510 % 5 = 0-> 최대공약수: 5이렇게 쉽게 최대공약수를 산출가능하다. 코드형식은 아래와 같다. int gcd(int a, int b) { int temp; while(b != 0) { temp = a % b; a = b; b = temp; ..

알고리즘 2024.08.26

프로그래머스 숫자 카드 나누기 (c++)

최대공약수를 구하는 유클리드 호제법을 이용한 문제이다. 이에 최대공약수를 구하는 규칙을 모른다면 문제를 못푼다.알고리즘 풀이우리가 아는 유클리드 호제법은 두 수에 대한 최대공약수를 구하는 함수를 알고 있을 것이다.그러나 이번 문제에서는 여러 수의 최대공약수를 구해야하는 문제이다. 그러면 어떻게 할까? -> 생각보다 쉽다. 5개의 수가 있다고 할 때, 1번째 2번째 수의 최대공약수를 N이라 할 때, 3번째 수와 N의 최대공약수를 구하면 된다.어짜피 첫번째, 두번째 수를 0으로 만들 수 있는 최대의 값이 N이기 때문에, N과 3번째수만 비교해도 3개의 수의 최대공약수를 알 수 있다.  해당 방법으로 두 사람이 가진 카드뭉치의 최대공약수 2개를 구한 뒤, 상대방의 카드뭉치를 나눌 수 있는지 없는지 확인하면 된..

알고리즘 2024.08.16

백준 11568번 민균이의 계략

전형적인 DP문제이다.DP를 워낙 못하다보니, 계속해서 DP에 익숙해지고 감잡는데 초점을 맞춘다... 알고리즘 풀이입력 배열 : 입력받은 입력 배열값. 설명에서 vec이라 하겠음.dp배열 : 해당 인덱스가 최대값일 때, 수열의 최대 원소 갯수값 해당 문제는 점화식이 따로 있다기 보다는 증가하는 수열의 기본적인 문제였다. (1) 현재 vec의 인덱스 i의 원소가 하위(vec[1] ~ vec[i-1]) 원소보다 커야하는 것과 (2) (1)의 조건에 해당하는 원소 중, 길이가 가장 긴 값을 가져와서 dp배열에 +1한 수를 넣는다. 설명이 어렵다면 코드를 보면서 이해를 추가하기를 바랍니다. #include #include using namespace std;int main() { ios::sync_with..

알고리즘 2024.08.07

백준 9519번 졸려(c++)

구현, 문자열, 시뮬레이션 알고리즘 문제이다.  알고리즘 풀이눈을 깜빡이는 횟수가 최대 10억인거로 보아서, 일반적인 반복문으로는 시간복잡도를 초과할 것이다.그러므로 눈을 깜빡이는 횟수 N을 줄이는 어떤 방법이 존재한다.이때, 주어진 문자열이 다시 원래대로 돌아오는 사이클이 존재하는 것을 알 수 있다.또 사이클이 문자열의 길이와 상관없이 불규칙적인 것 또한 아는 것이 중요하다. 그러므로, 먼저 사이클의 횟수를 구하고 사이클의 횟수보다 눈을 깜빡이는 횟수가 더 많다면둘을 나눠 남는 나머지를 구한다.해당 나머지는 사이클을 돌고 난 뒤, 마저 깜빡이는 수이다.해당 나머지만큼 실제로 문자를 옮겨준다면 문제는 풀린다.-> 문자열의 이동규칙은 코드를 보며 파악하자.#include #include using name..

알고리즘 2024.08.06

백준 10026번 적록색약(c++)

10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 문제 분석 문제 조건 문제는 적록색약인 사람이 본 그림의 구역과, 적록색약이 아닌 사람이 본 그림의 구역을 출력하도록 한다. 2차원 배열의 그림판이 주어지고, 그림판의 각 칸은 R, G, B 중 하나가 칠해져있다. 적록색약인 사람은 R와 G의 색을 구분하지 못하기에 같은 구역으로 처리한다. 이때, 상하좌우로 인접한 경우에는 같은 구역이라 한다. 💡 문제를 마주하자마자, 깊이 우선 탐색(DFS)로 풀어야한다는 것을 알아야 한다. 깊이 우선 탐색의 대표적인, ..

알고리즘 2024.01.25

백준 18870번 좌표 압축(C++) (lower_bound)

18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다. X1, X2, ..., XN에 www.acmicpc.net 문제 분석 좌표 압축의 문제를 읽어보면, 2가지에 초점을 맞추면 쉽게 문제를 해결할 수 있다. N개의 좌표에서 좌표 X를 압축한 결과 X'는, X보다 작은 서로 다른 좌표의 개수이다. 여기서 좌표는 중복될 수 있기에, '서로 다른'에 집중해야한다. ex) 만약 좌표 X = 3이라 할 때, X보다 작은 좌표가 { 1, 1, 2 } 가 있다고 가정하자. 이 경우, 압축 좌표 X' = 2이다. 입출력값이 정렬되지 않는..

알고리즘 2023.12.31

[Algorithm] 정렬 알고리즘 완.전.정.복 1편 (버블, 선택, 삽입)

정렬 알고리즘이란?-> 데이터를 정해진 기준에 따라 의미있는 구조로 재설정하는 것을 말한다. 즉, n개의 입력이 주어지면 내가 원하는 기준에 따라 데이터를 정렬하는 방식이다. ex) 1 ~ 10의 숫자가 무작위로 배치되어있다면, 이를 오름차순으로, 혹은 내림차순으로 설정하여 데이터를 순서대로 설정하는 것을 말한다. 정렬 알고리즘에는 대표적인 6가지의 알고리즘이 존재한다.이를 총 2편에 나눠서 배울 것이며, 시간이 가장 느릴 방식부터, 가장 빠른 방식까지 알아보도록 하겠다. 버블 정렬주어진 데이터의 인접 요소끼리 비교하고, 기준에 따라 swap하는 형식. O(N^2)선택 정렬전체 데이터를 비교한 뒤, 기준에 맞는 데이터를 앞으로 보내는 것을 반복하는 형식. O(N^2)삽입 정렬대상을 선택하고, 정렬된 영역..

알고리즘 2023.12.29

백준 16918번 봄버맨(c++)

문제 분석 봄버맨 문제를 읽고, 마땅한 알고리즘이 떠오르지 않았다. 어떤 알고리즘을 활용하기보다는 문제 자체에서 해결하는 구현에 초점을 맞춘 문제로 판단했다. 이는 3가지의 키워드를 잡고 접근하면 쉽게 해결할 수 있다. 초기 설정 이후, 봄버맨은 1초간 아무것도 하지 않는다. 다음 1초간 폭탄이 없는 곳에 폭탄을 설치한다. 폭탄이 터지는 시간은 3초이며, 폭발위치에 폭탄은 연쇄반응을 하지 않는다. 특히 2, 3번의 동작을 반복하기에 2가지 중 가장 중요한 분석이 있다고 생각할 수 있으나, 필자는 1번이 가장 중요하다고 생각한다. -> 1번을 살펴보면 초기 설정 이후 봄버맨은 계속해서 폭탄을 설치하고, 폭발하고를 반복하게 된다. 이 부분이 문제 전체에서 어색하다고 생각했고, 일정 규칙을 만들기 위한 조건이..

알고리즘 2023.11.18

백준 11286번 절댓값 힙(c++)

11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 문제 분석 문제는 입력받는 숫자 중 절댓값이 가장 작은 숫자를, 만약 절댓값이 같다면 수가 가장 작은 수를 기준으로 정렬시키려 한다. 그리고 0을 입력받았을 때, 위의 조건에서 가장 앞에 정렬된 숫자를 출력하고 삭제한다. 결국 배열을 정렬시키는 정렬방식이 가장 핵심이라고 할 수 있다. 문제 풀이 첫 접근은 swap함수를 이용한 정렬이었다. 입력받은 숫자를 하나의 배열에 집어넣고, 집어넣은 숫자와 옆숫자와 서로의 절댓값을 비교하도록 했다. 위 ..

알고리즘 2023.09.21
LIST