목록Study/Algorithm (400)
hwooo
https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 풀이 길이가 N-1인 계단수의 끝자리 숫자에 따라 길이가 N인 계단수의 개수가 정해진다. 길이가 N-1인 계단 수의 끝자리가 0 (ex. 10, 210...) : N자리인 계단 수는 101, 2101로 1개씩만 존재 끝자리가 9 (ex. 89, 6789...) : N자리인 계단 수는 898, 67898로 1개씩만 존재 끝자리가 1~8 (ex. 21, 8...) : N자리인 계단 수는 210, 212, 87, 89로 각각 2개씩 존재 따라서 DP 배열을 DP[길이][끝 숫자] 로 설정했다. - 길이가 1인 계단 ..
https://www.acmicpc.net/problem/1043 1043번: 거짓말 지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게 www.acmicpc.net 풀이 - 파티마다 참가자를 기록하고, 참가자들마다 참석하는 파티를 기록했다. - 진실을 알고 있는 사람들이 참여하는 파티에 참가하는 모든 사람들도 진실을 알고 있으므로, 처음 진실을 아는 사람들이 있는 파티의 참여자를 모두 검출 및 큐에 저장 엮인 모든 사람을 검출할 때까지(큐가 빌 때까지) 해당 과정을 반복함 코드 #include #include #include using namespace std; vec..
https://www.acmicpc.net/problem/1038 1038번: 감소하는 수 음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 www.acmicpc.net 풀이 - 자릿수를 나눠서 감소하는 수를 구했다. 현재 숫자의 마지막 단위보다 작은 숫자인 경우에만 함수를 실행, 수를 만든 후 크기 순으로 정렬해 N번째로 감소하는 수가 V[N]이 되게끔 했다. - 가장 큰 감소하는 수는 9876543210으로 long long 범위를 사용해야 함! 코드 #include #include #include using namespace std; vecto..
https://www.acmicpc.net/problem/15904 15904번: UCPC는 무엇의 약자일까? 첫 번째 줄에 알파벳 대소문자, 공백으로 구성된 문자열이 주어진다. 문자열의 길이는 최대 1,000자이다. 문자열의 맨 앞과 맨 끝에 공백이 있는 경우는 없고, 공백이 연속해서 2번 이상 주어지는 www.acmicpc.net 풀이 문자열을 받은 후 UCPC 글자를 순서대로 탐색한다.원하는 문자가 나온 경우 다음 글자를 탐색하고, 마지막 글자까지 확인된 경우 종료 후 "I love UCPC" 출력 코드 #include #include #include using namespace std; int main() { char cmp[5] = "UCPC"; int now = 0; string S; getl..
https://www.acmicpc.net/problem/1439 1439번: 뒤집기 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모 www.acmicpc.net 풀이 0과 1의 구간 개수를 구해서, 더 적은 구간의 개수를 뒤집으면 최소 횟수가 된다. 코드 #include #include #include #include using namespace std; int main() { string S; int cnt[2] = { 0, }; cin >> S; char now = '2'; for (int i = 0; i < S.size(); i++) { // 현재와..
https://www.acmicpc.net/problem/10610 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 풀이 - 모든 자리수의 합이 3의 배수일 경우 해당 숫자는 3의 배수이다.- 문제에서는 30의 배수를 구하므로 모든 자리수의 합이 3의 배수 + 0이 최소 1개의 조건을 만족하면 된다.- 30의 배수 중 가장 큰 숫자는 각 자리수를 내림차순으로 정렬한 값이다. 코드 #include #include #include #include using namespace std; int main() { strin..
https://www.acmicpc.net/problem/1789 1789번: 수들의 합 첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다. www.acmicpc.net 풀이 - 자연수 N이 최대가 돼야 하므로 S는 1+2+...+N의 형태이다.- 이 때 5와 같이 1+2와 1+2+3의 사이의 값의 경우 지금까지 더한 값 중 하나를 빼주면 되므로 N-1이 답이다.- 입력이 unsigned int의 범위까지이므로 아래 코드에서 sum은 int의 범위를 넘어갈 수 있어 long long으로 지정해야 한다. 코드 #include int main() { unsigned long long int S, sum = 0, N = 0; // input scanf("%llu", &S); while ..