Algorithm
[C++][백준 BOJ]4963_섬의 개수.
문제 번호 https://www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 알고리즘 분류 그래프 탐색(BFS) 문제 풀이 BFS를 사용하여 이어진 부분을 모두 탐색하면 된다. 문제에서 최대 높이와 넓이는 각각 50이라고 하여 52*52 크기의 2차원 배열 Graph와 Visited를 사용하였다. 가장 왼쪽 위(1,1)에서 시작하여 (h, w)까지 탐색한다. 탐색 도중 땅(1)을 발견하면 BFS를 실행하여 Visited배열에 하나의 섬을 방문하였다(true..
[C++][프로그래머스]연습문제_N개의 최소공배수
문제 번호 https://programmers.co.kr/learn/courses/30/lessons/12953?language=cpp 코딩테스트 연습 - N개의 최소공배수 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배 programmers.co.kr 알고리즘 분류 수학 문제 풀이 예전에 풀어보았던 문제랑 비슷하다. 이 문제를 해결하기 위해서는 최대 공배수를 구하는 유클리드 호제법(GCD)을 알 필요가 있다. 간단하게 GCD는 2개의 자연수 또는 정식의 최대 공약수를 구하는 알고리즘이다. GCD : int gcd(int a, int ..
[JS][프로그래머스]연습문제_직사각형 별찍기.
문제 번호 https://programmers.co.kr/learn/courses/30/lessons/12969?language=javascript 코딩테스트 연습 - 직사각형 별찍기 이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다. 별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요. 제한 조건 n과 m은 각각 1000 이하인 자연수 programmers.co.kr 알고리즘 분류 입출력. 문제 풀이 특별한 알고리즘은 없다. 문제에서 주어지는 n과 m을 받아서 직사각형 모양으로 별을 출력하면 된다. process.stdin.setEncoding('utf8'); process.stdin.on('data', data => { const n = data.s..
[C++][백준 BOJ]1449_수리공 항승.
문제 번호 https://www.acmicpc.net/problem/1449 1449번: 수리공 항승 첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나 www.acmicpc.net 알고리즘 분류 그리디(greedy), 정렬(sort) 문제 풀이 구멍난 위치가 가까운 곳부터 먼곳순서로 정렬한다. 문제에서 구멍난곳 양쪽으로 0.5씩 간격이 있어야 한다고 했다. 그래서 (i 번째) + L >= (i+N)번째 +1 의 조건에 만족한다면 i번째에서 시작해서 i+N 번째 까지 같은 테이프로 막을 수 있다고 생각했다. 소수점 계산을 피하기 위해서 0.5씩 필요..
[C++][백준 BOJ]1202_보석 도둑.
문제 번호 https://www.acmicpc.net/problem/1202 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net 알고리즘 분류 그리디(greedy), 우선순위 큐(priority_queue) 문제 풀이 문제에서 주어진 가방의 크기들을 오름차순으로 정렬한다. 문제에서 주어진 보석들 또한 무게를 기준으로 오름차순으로 정렬한다. 우리는 가방에 1개의 보석만 넣을 수 있기 때문에 넣을 수 있는 보석들중 가장 비싼 보석을 넣어야한다. 그래서 Ma..
[C++][백준 BOJ]16953_A->B.
문제 번호 https://www.acmicpc.net/problem/16953 16953번: A → B 첫째 줄에 A, B (1 ≤ A B는 가능하다. if(B==A) break; B가 A보다 작아진다면 A->B는 불가능하다. if(B < A) return -1; 마지막..
[C++][백준 BOJ]1080_행렬.
문제 번호 https://www.acmicpc.net/problem/1080 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net 알고리즘 분류 그리디(greedy). 문제 풀이 문제에서 주어진 A,B 행렬을 (0,0) 부터 (N-2, M-2) 까지 탐색하여서 서로 다른 값을 갖을때 마다 3*3 크기의 부분행렬을 뒤집어주는 과정을 수행하였다. 1. 다른 부분이 있을때 까지 탐색한다. for (int i = 0; i < N - 2; i++) { for (int j = 0; j < M - 2; j++) { if (arry1[i][j..
[C++][백준 BOJ]1744_수 묶기.
문제 번호 https://www.acmicpc.net/problem/1744 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net 알고리즘 분류 그리디(greedy), 정렬 문제 풀이 문제에서 주어진 수열을 오름차순으로 정렬한다. 합을 가장 크게 만드는게 목표이기 때문에 양수는 가장 큰 수 끼리 묶어서 더해야하고 음수는 가장 작은 수 끼리 묶어서 더해야한다. 그래서 양수부분의 합, 음수부분의 합을 구한다음 bool 형태의 visited 배열을 선언하여서 남은 수 들을 더해주기로하였다. 문제에서 주어진 수열을 오름..