문제 바로가기 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/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/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/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
문제 바로가기 https://www.acmicpc.net/problem/1152 관련 알고리즘 - 해당 없음 정답 및 해설 문자열 한 줄을 입력받아 그 문장이 몇 개의 단어로 이루어져 있는지 판단하는 문제이다. 해당 문제에서는 예제 입력에서 예외를 발생시키는 상황에 관한 힌트가 주어졌다. 첫 번째 문자와 마지막 문자에 공백이 입력되는 것인데 대부분의 문제에서는 위와 같은 예외 입력을 알려주지 않으니, 직접 찾아서 처리해야 한다. 힌트와 같이 문자열 중간에 공백이 있는 경우 단어의 경계로 간주할 수 있지만 처음과 마지막에 공백이 들어가는 경우에는 그렇지 않다. 이를 코드를 작성할 때 반드시 잊지말고 반영하여야 한다. C++ 더보기 #include #include using namespace std; int..
문제 바로가기 https://www.acmicpc.net/problem/1000 관련 알고리즘 - 해당 없음 정답 및 해설 입력받은 두 정수의 합을 출력하는 간단한 문제이다. C ++ 더보기 #include using namespace std; int main(){ int A,B; cin>>A>>B; cout