문제 바로가기 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
문제 바로가기 https://www.acmicpc.net/problem/1157 관련 알고리즘 - 아스키코드 정답 및 해설 문자열을 입력받아 대소문자 구분 없이 가장 많이 포함된 알파벳을 찾는 문제이다. 아스키코드를 사용하여 간단하게 풀어낼 수 있겠지만 대소문자 구분이 없다는 점에 주의해서 코드를 작성해야 한다. C++ 더보기 #include using namespace std; int main(){ char c; int i,max=0,s[26]={0,}; while(1){ cin>>c; if(cin.eof()) break; if(c>='a') c-=32; s[c-'A']++; } for(i=1; is[max] ? i:max; } for(i=0; 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