문제https://www.acmicpc.net/problem/1037 풀이오름차순으로 정렬하고, 첫 번째 인덱스와 마지막 인덱스의 수를 곱해 해당 수를 찾았다.약수가 하나뿐일 때는 해당 수를 제곱해서 바로 출력하고 조기종료하는 방식으로 구현했다. 소스코드#include using namespace std;int main(){ int num_divisor; cin >> num_divisor; int divisor_list[num_divisor]; // int* realDivisor = new int[num_divisor]; for(int i=0; i> divisor_list[i]; } if(num_divisor == 1) { cout divisor_list[j]) { m..
문제https://www.acmicpc.net/problem/2822 풀이주어진 8개의 수 중 합을 최대로 하는 5개의 수를 찾고, 5개 수의 합과 각 수들의 index를 출력하는 문제였다. 정렬을 통해 쉽게 풀 수 있는 문제였지만, 입력받은 수를 저장한 배열을 정렬해버리면 후에 index 출력이 불가능해진다.따라서 수를 입력받았던 원본 배열(scores[])은 그대로 두고, 원본 배열에서 큰 수 5개를 찾아 scoresInOrder[] 배열에 넣었다.선택 정렬처럼 가장 큰 수, 그 다음 큰 수, 그 다음 큰 수를 찾는 방식을 사용했는데, 원본 배열을 선택 정렬할 때와 달리 가장 큰 수를 저장한 후에 해당 수가 배열에서 사라지지 않으므로 앞에 저장한 수와 크기를 비교하는 단계( scores[j] 큰 수..
문제https://www.acmicpc.net/problem/2592 풀이처음에는 배열 두 개를 이용해 하나는 입력된 숫자를, 다른 하나는 해당 숫자가 입력된 횟수를 저장하며 풀 수도 있겠다고 생각을 했다.key-value 형태인 것 같아 map을 이용해 풀어보았다. map은 처음이라 사용방법을 구글에 검색해 풀었다.// 선언map numList;// insert #1numList.insert({1, 2});// insert #2numList[1]++;value가 하나씩 늘어나기 때문에, numList[key]++ 을 이용해 풀었다. key와 value가 모두 int라서 푸는동안 약간 헷갈리기도 했다. for(auto num : numList)를 이용해 처음에 맞게 풀었다가, 결과가 자꾸 이상하게 나와서..
문제https://www.acmicpc.net/problem/1292 풀이count_start 와 count_end 로 시작, 끝의 index를 입력받았다. 중첩 반복문을 사용해 설계했다.바깥 반복문의 변수 i는 수열에 들어가는 수를 담당했다. 안쪽 반복문의 변수 j는 i가 수열에 들어가는 횟수를 담당했다.별도의 변수 count가 1부터 증가하며 몇 번째 수인지 세었다. 바깥 반복문에서 변수 i는 1부터 1씩 증가하며 수행되었고, i와는 상관없이 총 수행횟수를 세는 count 변수가 입력받은 count_end 변수보다 작거나 같은동안 수행되었다.안쪽 반복문에서 변수 j는 1부터 1씩 증가하며 수행되었고, 바깥 반복문의 변수 i 보다 작거나 같은 동안, 그리고 count 변수가 count_end 변수보다 ..
문제https://www.acmicpc.net/problem/10162 풀이최소 횟수를 구해야하므로 큰 단위인 5분(300초)부터 1분(60초), 10초 순서대로 각 단위의 최대 횟수를 구했다.최소 단위가 10초이므로, 10으로 나누어떨어지지 않으면 -1을 출력하고 return을 이용해 조기반환시켰다. 소스코드#include #include using namespace std;int main(){ int T; //조리시간 cin >> T; int A=0, B=0, C=0; // 버튼. 각각 300, 60, 10초 if(T%10 != 0) { cout 9) { if(T >= 300) { T -= 300; A++; } else if (T >= 60) { ..
문제https://www.acmicpc.net/problem/5063 풀이첫 번째 입력과 나머지 두 입력의 차를 계산해 비교했다. 소스코드#include using namespace std;int main(){ int n; cin >> n; // number of cases int r, e, c; int i=0; while(i > r >> e >> c; if(r > e-c) cout 발전다국어 문제라서 영어로 봤는데, 문제 내용을 너무 꼼꼼히 보지는 않아도 될 것 같다.
문제https://www.acmicpc.net/problem/5717 풀이입력받은 두 정수를 더하면 되는 문제였다. 소스코드#include using namespace std;int main(){ int L=1, R=1; while(1) { cin >> L >> R; if(L==0 && R==0) return 0; cout 발전다국어 문제는 최대한 영어 문제 그대로 읽고 풀려고 시도해보고 있다.
문제https://www.acmicpc.net/problem/10102 풀이표의 개수 V의 범위가 15 이하이므로 길이 16의 문자 배열을 사용했다. 소스코드#include using namespace std;int main(){ int votesNum; cin >> votesNum; char votes[16]; cin >> votes; int a=0, b=0; int i=0; while(i b) cout 발전문자 배열 사용하는게 어느정도 익숙해진 것 같다. 문자 배열 말고 string을 공부해봐야겠다.