본문 바로가기

자료구조와 알고리즘/알고리즘31

4375 문제 요약 2와 5로 나누어 떨어지지 않는 정수 n, 각 자릿수가 모두 1로만 이루어진 n의 배수를 찾아라. 출력 각 자릿수가 모두 1로만 이루어진 n의 배수 중 가장 작은 수의 자리수를 출력한다. 문제 풀이 뭔소리야? 배수는 어떤 수를 다른 수로 나누었을 때 나누어 떨어지는 수를 말한다. 다른 말로는 한 수를 다른 수로 곱하여 얻어진 수를 해당 수의 배수라고 한다. 3, 6, 9는 뭐야? 3의 배수. 왜? 3,6,9라는 수를 3으로 나누었을 때 나누어 떨어지니까. 역으로 3 * 1 =3, 3 * 2= 6, 3*3=9, 얻어진 수는 3,6,9이고 이는 3의 배수. 이 개념으로 들어가면 각 자릿수가 1로만 이루어진 경우는 다음과 같다. 1 11 111 1111 11111 이를 n으로 나눈 결과가 0인 경우.. 2023. 7. 9.
1629 문제 요약 자연수 A를 B번 곱한 수를 알고 싶고, 이를 C로 나눈 나머지를 구해라. 입력 A, B, C 모두 2,147,483,647 이하의 자연수이다. 풀이 시간제한이 0.5초이다. 21억 번 반복하면서 곱하면 시간 초과가 발생한다. 또한 이 값이 long long 범위를 넘어서기 때문에 중간중간 나머지를 구해야 하고, 계산값을 중간에 캐싱해야한다. #include using namespace std; int r,a,b,c; long long powMod(int a, int b, int c){ if(b == 0) { return 1; } long long temp = powMod(a, b/2, c) % c; long long result = (temp * temp) % c; if(b & 1){ res.. 2023. 7. 9.
3986 문제 요약 A, B로 이루어진 단어를 이차형 곡선을 그어 쌍을 지어지면 좋은 단어이며, 이 개수를 센다. 입력 N개의 단어수 ( 100이하의 자연수) N개의 줄에 A와 B로 이루어진 단어가 한 줄에 하나씩 주어지며, 길이는 2와 100,000 사이이며, 모든 단어 길이의 합은 1,000,000을 넘지 않음. 출력 좋은 단어의 수 출력 풀이 stack 자료구조 문제로 문자열을 하나씩 입력받고 stack의 top 값이 들어온 입력과 같으면 top값을 pop 시키고, 그렇지 않으면 push 한다. 단어 반복마다 최종적으로 stack이 비어있으면 좋은 단어의 카운트를 1 증가시킨다. #include using namespace std; int n, cnt; string str; int main() { ios_b.. 2023. 7. 9.
1940 문제 요약 갑옷은 두 개의 재료로 만들어진다. 두 재료의 고유한 번호를 합쳐서 M이 되면 갑옷이 만들어진다. 입력 N개의 재료( 1 m; for (int i = 0; i > te[i]; if(m > 200000) cout 2023. 7. 9.
1213 문제 요약 들어온 문자열을 분해하여 팰린드롬을 만들어야 한다. 입력 알파벳 대분자의 최대 50글자. 출력 만든 팰린드롬 출력, 불가능할 때는 정해진 문자열 출력 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력 풀이 각 문자의 숫자를 세서 저장한다. 홀수가 2개 이상이면 팰린드롬을 만들 수 없다. 이제 만드는 것이 문제인데.. 다음과 같이 정의해 보자. 1. 이름을 입력받는다. 2. count 배열을 생성하여 들어온 문자열의 개수를 저장한다. 3. 오름차순으로 표현해야 하기 때문에 Z부터 반복한다. 4. 카운트가 존재하는 경우 4.1 홀수인지를 판단한다. 홀수라면 해당 문자열을 변수에 저장하고 카운트 값을 감소시킨다. 4.2 만약 홀수가 두 개이상인 경우 반복을 중단하고 불가능 출력을 진행한다. 이.. 2023. 7. 9.
9375 문제 요약 패션에 매우 민감하다. 한번 입었던 옷들의 조합을 다시 입지 않는 친구가 있다. 이 친구의 의상이 주어졌을 때 친구가 알몸이 아닌 상태로 며칠 동안 밖에 돌아다닐 수 있을까? 입력 친구가 가진 의상의 수 n이 주어진다. ( 0 tc; while(tc--){ map _map; cin >> n; for(int i=0; i > a >> b; _map[b]++; } long long ret = 1; for(auto a: _map){ ret *= ((long long) a.second + 1); } ret--; cout 2023. 7. 8.
1620 문제 요약 포켓몬 마스터가 되기 위한 도감 완성. 입력 도감에 기록된 포켓몬의 개수 N개 맞춰야 하는 문제의 개수 M개. 1 m; for (int i = 1; i > name; names[i] = name; numbers[name] = i; } string problem; for (int i = 0; i > problem; if (atoi(problem.c_str()) == 0) { cout m; for (int i = 1; i > name; names[i] = name; numbers[name] = i; } for (int i = 0; i > problem; if (atoi(problem.c_str()) == 0) { cout 2023. 7. 6.
2559 문제 요약 특정 기간 동안 온도를 측정했다, n일 동안 온도의 합이 가장 큰 값을 알아보고자 한다. 수열 : 숫자나 기호의 나열을 의미한다. 수열은 일정한 패턴이나 규칙에 따라 순서대로 배열된 원소들로 구성된다. 각 원소는 항이라고도 불린다. 입력 두 개의 정수 N과 K가 한 개의 공백을 두고 주어진다. N은 온도를 측정한 전체 날짜의 수이며 온도는 정수이다 (2 n >> k; for (int i = 1; i > tmp; sum[i] = sum[i - 1] + tmp; } for(int j = k; j 2023. 7. 6.
9996 문제요약 패턴은 알파벳 소문자 여러 개와 별표(* : 아스키값 42) 하나로 이루어진 문자열이다. *는 정규표현식의 *와 동일하게 동작한다. 0개 혹은 하나 이상이다. 주어진 패턴에 파일 이름의 일치 여부를 판단해라. 입력 문자열 길이는 100을 넘지 않는다. 별표는 문자열의 시작과 끝에 있지 않는다. 출력 입력으로 주어진 i번째 파일 이름이 패턴과 일치하면 "DA", 일치하지 않으면 "NE"를 출력한다. 풀이 정규표현식의 특정 표현을 만들어보는 유익한 경험이라 생각하자. 1차 시도 Failed (이 왜 틀?) #include using namespace std; int n; string pattern; vector result; int main() { cin >> n; cin >> pattern; ch.. 2023. 7. 4.
ROT13(11655) 알고리즘 문제 푸는 거 생각보다 재밌다. 문제요약 ROT13은 카이사르 암호의 일종으로 영어 알파벳을 13 글자씩 밀어서 만듦. 알파벳은 26자. 암호화하기 위해 13글자를 밀고 복호화를 위해 다시 ROT13을 사용하면 됨. ROT13은 알파벳 대문자와 소문자에만 적용 가능, 알파벳이 아닌 경우 암호화가 되면 안 됨. 입력 첫째 줄에 알파벳 대문자, 소문자, 공백, 숫자로만 이루어진 문자열(길이는 100을 넘지 않음) 출력 S를 ROT13으로 암호화한 내용을 출력 풀이 우선 문자열을 순회하면서 알파벳 여부를 확인하는 함수가 필요하다. bool isAlphabet(char ch){ return ((ch >= 'a' && ch = 'A' && ch = 'a' && ch = 'A' && ch = 'a' && .. 2023. 7. 2.