백준
[14888] 연산자 끼워넣기(C++)
문제 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, �� www.acmicpc.net 해결 방법 우선 연산자의 입력값을 숫자로 대치하여 operators 배열에 저장해주었다. + : 0 - : 1 x : 2 / : 3 위와 같이 설정하여 예를 들어 연산자 개수의 입력이 "2 0 1 0" 이라면 +, +, x 라는 뜻이므로, operators 배열에는 0, 0, 2가 저장된다. 입력된 숫자의 순서는 변경할 수 없기 때문에 가능한 연산자 순열의 모든 경우를 구해서 계산을 해줘야 하는데 ..
[1018] 체스판 다시 칠하기(C++)
문제 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 해결 방법 우리가 최종적으로 만들 수 있는 체스판의 경우는 아래와 같이 두 가지가 있다. 이 형태는 chess() 함수를 통해 구현하였다. 그리고 아래와 같은 보드를 입력받았다고 하자. 그러면 (0, 0) 부터 시작해서 (0, 1), (0, 2) ... (1, 0), (1, 1) ... 이런식으로 시작점을 옮겨가면서 아래와 같이 8x8 크기의 체스판을 찾고, 각각의 경우에서 우리가 미리 chess() 함수를 통해 구해놓은 정답과 비교하면서, 다른 칸..
[2231] 분해합(C++)
문제 2231번: 분해합 문제 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+ www.acmicpc.net 해결 방법 진짜 푸는 방법도 간단하고 코드도 간결한 문제인데 너무 터무니없는 곳을 발견하지 못하고 다른 부분을 계속 건드리다가 시간만 많이 날려먹었다... 우선 각 자리수의 합의 최솟값은 1이고 최댓값은 (9 * 자리수)이다. 즉, 세 자리수인 경우 각 자리수의 합은 최소 1부터 최대 9 * 3 = 27까지이다. 그렇다면 우리는 가능한 m의 초기값을 어떤 것에서부터 시작할 것인지를 결정해야 하는데, 1로 초기화 한 뒤에 n과 같아질..
코딩테스트 대비 사이트
1. 백준 온라인 저지 Baekjoon Online Judge Baekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다. www.acmicpc.net 2. 프로그래머스 코딩테스트 연습 기초부터 차근차근, 직접 코드를 작성해 보세요. programmers.co.kr 3. Algospot algospot.com :: 알고스팟에 오신 것을 환영합니다! algospot.com 4. LeetCode LeetCode - The World's Leading Online Programming Learning Platform Level up your coding skills and quickly land a job. This is the best place to expand y..
[3020] 개똥벌레(C++)
문제 3020번: 개똥벌레 문제 개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석�� www.acmicpc.net 해결 방법 1. 석순의 길이는 입력받는 값 그대로 stalagmite 배열에 저장 2. 종유석의 길이는 바닥과 종유석까지의 거리로 변환(동굴의 높이 - 종유석 길이)하여 stalactite 배열에 저장 3. stalagmite, stalactite 배열을 각각 오름차순 정렬 4. 1번째 구간부터 동굴의 높이와 같은 구간까지 탐색하며 해당 구간에서 석순과 종유석과 각각 몇 개씩 만나는지 계산! 이때 lower_bound() 함수를 사용하여 만나는 개수를 바..
[1620] 나는야 포켓몬 마스터 이다솜
https://www.acmicpc.net/problem/1620 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net 문제에 그림과 글이 되게 길게 있는데 실질적으로 문제 푸는데는 없어도 전혀 지장이 없었기 때문에 가져오지 않았는데 궁금하다면 문제 링크를 클릭!🖱 ✍️ 해결 방법 문자를 입력받았으면 포켓몬의 이름이 사전식으로 정렬되어 있는 배열에서 해당 문자를 찾아서 번호를 출력해 줄 것이고, 숫자를 입력받았으면 인덱스를 활용하여 바로 포켓몬의 이름을 출력해주면 된다. 따라서 포켓몬의..
[1920] 수 찾기(C++)
문제 1920번: 수 찾기 첫째 줄에 자연수 N(1≤N≤100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1≤M≤100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안�� www.acmicpc.net 해결 방법 1. n개의 정수를 배열 a에 입력받는다. 2. 배열 a를 오름차순으로 정렬한다. 3. 배열 a에 존재하는지 알고싶은 숫자들을 하나씩 입력받으면서 직접 구현한 binsearch 함수를 실행한다. (binsearch 함수는 그냥 일반적인 binary search 함수로 구현하면 된다.) 이 문제에서 핵심은 '시간 초과'가 나지 않도록 하는 것이었다. 처음에는 cin, cout, sort()를 사용하여 코..
[10610] 30
https://www.acmicpc.net/problem/10610 10610번: 30 문제 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶� www.acmicpc.net 🔎 해결 방법 우선 30의 배수가 되기 위해서는 두 가지를 만족해야 한다. 일의 자리가 0 각 자리의 합이 3의 배수 따라서 코드도 이런식으로 짜면 된다. ✍️ 알고리즘 1. string으로 문자열을 입력받은 후, sort 함수를 사용해서 오름차순으로 정렬한다. ex) 입력 : 80875542 -> 정렬한 후 : 02455788 2. 문자열의 첫번째 원소가 0인지 확인 0이라면 30의 배수가 되..