문제 바로가기 https://www.acmicpc.net/problem/11720 관련 알고리즘 - ASCII 코드 정답 및 해설 정수를 입력받아 각 자릿수의 합을 구하는 간단한 문제...라고 볼 수 있지만, 입력받는 정수가 무려 100개, 즉 100자리 수이다. int 타입은 물론, long long int까지 써도 모자라기 때문에 문자열로 처리해야 한다. 각 자릿수를 문자로 받아 정수로 변환하여 답을 구하고 이 방법은 이후 큰 자릿수를 다루는 문제에서도 종종 사용되니 꼭 숙지할 필요가 있다. C++ 더보기 #include using namespace std; int main(){ int tot=0,N; char s; cin>>N; while(N--){ cin>>s; tot+=s-'0'; } couts..
문제 바로가기 https://www.acmicpc.net/problem/10818 관련 알고리즘 - 해당 없음 정답 및 해설 정수 N개를 입력받아 그중 최솟값과 최댓값을 차례대로 출력하는 문제이다. 최솟값과 최댓값을 저장할 변수를 정의하고, 정수를 새로 입력받을 때마다 기존 값과 비교하여 업데이트하는 것으로 간단하게 해결할 수 있다. 이때 최솟값의 초기값은 입력할 수 있는 최대정수보다 큰 수, 최댓값의 초기값은 입력할 수 있는 최소정수보다 작은 수로 해야 한다. 최솟값의 경우만 살펴보도록 하자. 만약 초기값보다 작은 정수가 입력되지 않는다면 초기값이 출력되어 오답을 만들어낼 수 있다. 따라서 입력될 수 있는 모든 정수보다 큰 수(1,000,000)를 초과하는 수로 초기값을 설정해야 한다. ex) 초기값을..
문제 바로가기 https://www.acmicpc.net/problem/10809 관련 알고리즘 - ASCII 코드 정답 및 해설 알파벳 소문자로만 이루어진 문자열을 받아서 알파벳이 몇번째에 처음으로 등장하는지 묻는 문제이다. 알파벳의 위치를 저장할 배열을 만들고, 알파벳이 없는 경우 -1을 출력해야 하므로 먼저 -1로 초기화 시킨다. 그 후 입력받은 문자열의 알파벳을 하나씩 살펴보면서 해당 알파벳이 처음 등장했다면 해당 인덱스값으로 설정한다. 문자별 배열의 순서는 ASCII 코드값으로 문자열의 문자를 변수 s에 저장하면 s-'a' 번째 알파벳으로 계산할 수 있다. C++ 더보기 #include using namespace std; int main(){ string str; int alpha[26],i;..
문제 바로가기 https://www.acmicpc.net/problem/10250 관련 알고리즘 - 수학 정답 및 해설 가장 좌측열부터 호텔 손님에게 방을 배정하는 문제이다. 가장 아래층 1호부터 가장 위층 1호방이 다 찼을 경우, 그 때 다음 호수(2호) 가장 아래층부터 배정하는 순서이다. 알고리즘 칸에 '수학'으로 기재해두었는데, 해당 문제의 경우 간단한 나머지 계산으로 정답을 구할 수 있다. 층수는 N%H (나머지)로, 호수는 N/H의 정수부(몫)로 나타낼 수 있기 때문이다. 예를 들어 H=3, W=4인 호텔의 10번째 방 : 층수 = 10%3 = 1, 호수 = (10/3)+1 = 4 즉, 104호이다. 301 (3) 302 (6) 303 (9) 304 (12) 201 (2) 202 (5) 203 ..
문제 바로가기 https://www.acmicpc.net/problem/8958 관련 알고리즘 - 해당 없 정답 및 해설 OX퀴즈를 컨셉으로 점수를 계산하는 문제이다. 문제를 간단히 요약하자면 리듬게임이나 격투게임을 할 때 '콤보'를 세어 점수를 계산해야 한다. 연속해서 맞춘 문제의 개수(콤보)를 저장할 변수를 만들고 콤보 수만큼 총점에 더하여 간단히 해결한다. 다만, 이 문제에서는 테스트 케이스(통칭 T)가 한 번의 실행에 여러 개 주어진다. 각 테스트케이스 실행 시마다 관련된 변수를 초기화해야 한다는 점에 유의하자. C++ 더보기 #include using namespace std; int main(){ int T,tot,combo; string S; cin>>T; while(T--){ combo=0..
문제 바로가기 https://www.acmicpc.net/problem/3052 관련 알고리즘 - 해당 없음 정답 및 해설 10개의 정수를 입력받아 모두 42로 나눈 나머지를 계산하여 그 종류가 몇개인지 찾는 문제이다. bool 타입 Remains[42] 배열을 정의하여 0으로 초기화한다. 그 후, 나머지(N)를 계산할 때마다 Remains[N]의 값을 1로 바꾸어주고 마지막에 Remains 배열을 확인하여 값이 1인 경우의 갯수를 세서 출력하면 될 것이다. C++ 더보기 #include using namespace std; int main(){ bool Remains[42]={0,}; int num,ans=0,i; for(i=0; i>num; Remains[num%42]=1; } for(i=0; i
문제 바로가기 https://www.acmicpc.net/problem/2920 관련 알고리즘 - 해당 없음 정답 및 해설 입력받은 숫자들이 차례대로 나열되어 있는지 묻는 문제이다. 간단한 구현문제이기때문에 풀이가 다양하게 나올 수 있다. 필자의 경우 type 이라는 배열을 선언하여 앞뒤 숫자의 관계를 파악하여 배열에 저장했다. 그 후 조건문을 사용하여 입력받은 수열의 맞게 출력하여 해결하였다. C++ 더보기 #include using namespace std; int main(){ int a,b,type[2]={0}; for(int i=0; i>b; if(i==0){a=b; continue;} if(b==a+1) type[0]++; else if(b==a-1) type[1]++; a=b; } if(ty..
문제 바로가기 https://www.acmicpc.net/problem/2884 관련 알고리즘 - 해당 없음 정답 및 해설 현재 시간과 분을 입력받아 45분전 시간을 출력한다. 45분을 먼저 빼고 음수가 되는 시간이 있다면 양수로 바꾸어 출력하면 해결할 수 있다. C++ 더보기 #include using namespace std; int main(){ int h,m; cin>>h>>m; m-=45; if(m
문제 바로가기 https://www.acmicpc.net/problem/2675 관련 알고리즘 - 해당 없음 정답 및 해설 테스트케이스의 개수를 입력받은 후 정수와 문자열을 받아서 문자열 내의 각 문자를 정수만큼 반복 출력하는 문제이다. 별다른 알고리즘 없이 문제에서 제시한 그대로 코드만 구현하면 된다. C++ 더보기 #include using namespace std; int main(){ string S; int T,N; cin>>T; while(T--){ cin>>N; cin>>S; for(int i=0;i
문제 바로가기 https://www.acmicpc.net/problem/2577 관련 알고리즘 - 해당 없음 정답 및 해설 입력받은 세 수를 모두 곱해서 나온 수의 각 자리 숫자의 개수를 세는 문제이다. 위에 적혀 있듯 곱한 수가 17037300 이면 3, 1, 0, 2, 0, 0, 0, 2, 0, 0을 한 줄에 하나씩 출력하면 된다. 각 자릿수를 분리하는 방법 중 while 문을 사용하여 풀이하고자 한다. 곱한 수를 Mult에 저장해 두고 while(Mult) 반복문을 사용하여 Mult>0 인 조건을 만족하는 동안 작동할 수 있도록 하고, while 문 안에서 Mult%10으로 각 자릿수를 분리한 후, Mult/=10으로 자리 수를 하나씩 줄여나가는 방식으로 풀이하자. ※ C와 C++, Java의 경우..
문제 바로가기 https://www.acmicpc.net/problem/2562 관련 알고리즘 - 해당 없음 정답 및 해설 9개의 정수를 입력받아 그중 최댓값과 최댓값의 인덱스(몇 번째)를 출력하는 문제이다. 값이 하나 입력될 때마다 기존 최댓값과 비교해서 값과 인덱스를 업데이트하여 간단하게 해결할 수 있다. C++ 더보기 #include using namespace std; int main(){ int MAX=0,idx,n; for(int i=1;i>n; if(n>MAX){ MAX=n; idx=i; } } cout
문제 바로가기 https://www.acmicpc.net/problem/2439 관련 알고리즘 - 해당 없음 정답 및 해설 자연수 N을 입력받아서 예제 출력과 동일한 양식으로 *을 출력하는 문제이다. 예제 출력을 통해 우측 끝으로 정렬된 *을 1개, 2개, 3개,... N개까지 출력하는 문제이다. * 문자의 좌측을 공백으로 Padding해서 (채워서) 해결할 수 있다. C++ 더보기 #include using namespace std; int main(){ int n; cin>>n; for(int i=1; i