Baekjoon 7

[백준 C/C++] 11170번 - 0의 개수

문제 N부터 M까지의 수들을 종이에 적었을 때 종이에 적힌 0들을 세는 프로그램을 작성하라. 예를 들어, N, M이 각각 0, 10일 때 0을 세면 0에 하나, 10에 하나가 있으므로 답은 2이다. 입출력 첫 번째 줄에 테스트 케이스의 수 T가 주어진다. 각 줄에는 N과 M이 주어진다. 1 ≤ T ≤ 20 0 ≤ N ≤ M ≤ 1,000,000 각각의 테스트 케이스마다 N부터 M까지의 0의 개수를 출력한다. 풀이 10으로 계속 나눠가며 0이 있는지 판단하면 된다. #include using namespace std; int main() { int t; scanf("%d", &t); for(int tc=0;tc

Baekjoon/Silver 2022.01.27

[백준 C/C++] 16212번 - 정열적인 정렬

문제 형준이는 수열을 하나 가지고 있다. 형준이는 수열을 정열적으로 정렬해보려 한다. 과연, 정렬할 수 있을까? 입출력 첫째 줄에는 수열의 길이 N (1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 수열의 각 원소 ai가 공백을 사이에 두고 차례대로 주어진다. ai의 절댓값은 200만 이하이다. 수열 a를 오름차순으로 정렬해서, 공백을 사이에 두고 하나씩 차곡차곡 출력하자. 풀이 Sort 함수를 이용해 정렬해주면 된다. #include #include using namespace std; int list[500001]; int main() { int n; scanf("%d", &n); for(int i=0;i

Baekjoon/Silver 2022.01.26

[백준 C/C++] 1932번 - 정수 삼각형

문제 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 위 그림은 크기가 5인 정수 삼각형의 한 모습이다. 맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다. 삼각형의 크기는 1 이상 500 이하이다. 삼각형을 이루고 있는 각 수는 모두 정수이며, 범위는 0 이상 9999 이하이다. 입출력 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. 첫째 줄에 합이 최대가 되는 경로에 있는 수의 합을 출력한다. 풀이 한 층을..

Baekjoon/Silver 2022.01.21

[백준 C/C++] 2693번 - N번째 큰 수

문제 배열 A가 주어졌을 때, N번째 큰 값을 출력하는 프로그램을 작성하시오. 배열 A의 크기는 항상 10이고, 자연수만 가지고 있다. N은 항상 3이다. 입출력 첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 배열 A의 원소 10개가 공백으로 구분되어 주어진다. 이 원소는 1보다 크거나 같고, 1,000보다 작거나 같은 자연수이다. 각 테스트 케이스에 대해 한 줄에 하나씩 배열 A에서 3번째 큰 값을 출력한다. 풀이 이진수를 구하듯 큰 비트부터 1까지 내려가며 n을 i로 빼주면 된다. #include #include using namespace std; int a[11]; int main() { int n; scanf("%d", &..

Baekjoon/Silver 2022.01.13

[백준 C/C++] 2750번 - 수 정렬하기

문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입출력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 풀이 Sort 함수로 정렬해주면 되는 간단한 문제이다. #include #include using namespace std; int nums[1001]; int main() { int n; scanf("%d", &n); for(int i=0;i

Baekjoon/Bronze 2022.01.12

[백준 C/C++] 16953번 - A → B

문제 정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다. 2를 곱한다. 1을 수의 가장 오른쪽에 추가한다. A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자. 입출력 첫째 줄에 A, B (1 ≤ A B 과정을 역산한다고 생각하면서 풀면 편하다. B의 끝자리가 1일 때는 끝자리를 빼주고, B가 2로 나눠떨어질 때는 2로 나눠주면 된다. #include using namespace std; int main() { int a,b; int count=1; scanf("%d %d", &a, &b); while(true) { if (a=..

Baekjoon/Silver 2022.01.11