cpp 25

[C++] 3052 나머지

배열 in_arr 에 숫자 10개를 차례대로 입력받고 저장한다. 배열 re_arr 에 in_arr 의 원소들을 각각 42로 나눈 나머지를 차례대로 저장한다. re_arr 를 오름차순으로 sort 한다. check 라는 변수를 만들고, re_arr의 첫번째 원소를 할당해준다. re_arr 의 두번째 원소부터 차례대로 check 와 같은 값을 가지는지 아닌지 확인을 해본다. 같은 값이 아니라면 cases 값을 하나 증가시켜 준 뒤, check 값은 비교결과가 같지 않았던 그 re_arr의 원소 값으로 다시 할당해준다. 앞의 과정을 re_arr 의 모든 원소에 대해서 반복한다. 비교가 끝났다면 cases 값을 출력한다. #include #include using namespace std; int main() ..

Training/BOJ 2020.08.03

[C++] 2577 숫자의 개수

0~9개가 각각 몇 개인지 저장할 배열 count를 만든다. (배열값들 0으로 초기화) int A,B,C를 입력받고 long mult 변수에 곱셈결과를 저장한다. 이제 mult>0 를 만족하는 동안, mult%10 을 구한 뒤 mult 를 10으로 나눠주는 과정을 반복한다. mult%10 이 0~9 중 무엇인지 switch문을 통해서 판단 후 배열의 해당되는 원소 값을 증가시켜준다. ex) mult%10 == 1 이면 count[1]++, mult%10 == 5 면 count[5]++. mult/=10 후 앞의 과정 반복. mult 가 다 나눠지고 0이 되면 count 배열의 원소들을 차례대로 출력한다. #include using namespace std; int main() { int A = 0, B ..

Training/BOJ 2020.08.03

[C++] 2562 최댓값

서로 다른 100보다 작은 자연수 9개를 in_arr 배열에 입력받는다. in_arr 배열의 원소들을 sort_arr로 복사한다. sort_arr를 algorithm의 sort 함수를 이용해서 정렬한다. 그럼 sort_arr의 맨 마지막 원소가 최댓값이다. 이 최댓값과 in_arr의 원소들을 차례대로 비교하면서, 매치되는 원소의 in_arr 내에서의 위치를 저장한다. 최댓값과 위치값을 출력한다. #include #include using namespace std; int main() { int* in_arr = new int[9]; int* sort_arr = new int[9]; int max = 0, loc = 0; for (int i = 0; i > in_arr[i]; f..

Training/BOJ 2020.08.03

[C++] 11720 숫자의 합

처음에 이걸 어떻게 풀지 고민할 때, '입력을 string으로 받은 다음에 stoi 함수를 이용해서 int로 바꾸고, 계속 10으로 나눈 나머지를 더한 결과를 출력하면 되겠네!' 라고 생각했다. ​ 그대로 구현하다 보니 미처 고려 못 한 부분이 있었다. 둘째 줄에 입력받을 숫자는 1개 이상 100개 이하다. 즉, 최대 100개의 자릿수를 가진 매우 큰 숫자가 입력될 수도 있다. 그런 큰 숫자는 int형으로 변환될 수 없다. int형이 표현할 수 있는 가장 큰 수는 2,147,438,647 밖에 안 되기 때문. ​ 그렇다면 int 보다 더 큰 자료형인 long long으로 변환하면 해결될까? 그것 또한 아니다. long long이 제 아무리 int 보다 두 배의 메모리 공간을 가지고 수용할 수 있는 범위가..

Training/BOJ 2020.07.20

[C++] 15552 빠른 A+B

cin / cout 을 사용하고자 한다면 sync_with_stdio(false); cin.tie(NULL); 를 둘 다 적용하라고 한다. 그리고 endl 대신 개행문자를 써야한다. ​ 문제의 요지는 '시간을 최대한 줄여라.' 이다. #include using namespace std; int main() { cin.tie(NULL); ios::sync_with_stdio(false); int T; cin >> T; int a, b = 0; int *result = new int[T]; for (int i = 0; i > a >> b; result[i] = a + b; } for (int i = 0; i < T; i++) { cout

Training/BOJ 2020.07.20

[C++] 2839 설탕 배달

나누기, 나머지 연산을 이용하는 문제 ​ 머리가 굳어버려 쩔쩔매던 중에 힌트 발견해서 단번에 성공. (감이 안 잡힐 때에는 저 힌트를 보자.) ​ 문제는 설탕 N kg을 배달하는데, 봉지의 갯수를 최소한으로 해야한다는 것. 결국 5kg 짜리 봉지를 가능한 한 많이 끼워넣고 시작해야한다. ​ 그럼 먼저, N(3 이상)을 5로 나눈 나머지를 구해보자. 3, 4, 0, 1, 2 가 반복된다. 그렇다는 얘기는 N%5의 결과에 따라 경우가 나뉜다는 뜻. 경우에 따라 구분하여, 각각의 규칙을 찾아본다. ​ if (N%5 == 3): 5로 나눴을 때의 나머지가 3인 숫자는 3, 8, 13, 18, 23, ... 3을 제외하고 8부터는 5x + 3의 꼴이다. ​ if (N%5 == 4): 4, 9, 14, 19, 24..

Training/BOJ 2020.07.18

[C++] 1008번 A/B

성공할 때 까지 무려 7번이나 틀린 문제. 별거 아니라고 얕봤다가... ㄷㄷ ​ 문제는 cout.precision() 이었다. 이게 무엇인지, 문제가 무엇을 요구하는지 잘못 이해한 채로 무작정 화만 내면서 제출하니까 안 됐던 것. ​ 문제의 출력 조건은 절대/상대 오차는 10^-9 까지 허용한다. 난 이걸보고 무작정 cout.precision(9); 을 쓰고 앉아있었다. 이건 문제를 잘못 이해한거다. ​ 오차를 10^-9 까지 허용한다라고 함은, 소수점 아래 9번째 자리까지는 무조건 출력해야함. 10번째 자리부터는 오차로 인식. ​ 그럼 cout.precision(int)는 무엇인가? std library 안의 ios_base Class 에 속한 함수다. (여기서 ios 란 그 사과사의 운영체제가 아닌 ..

Training/BOJ 2020.07.18
반응형