문제:
옛날 옛적에 수학이 항상 큰 골칫거리였던 나라가 있었다. 이 나라의 국왕 김지민은 다음과 같은 문제를 내고 큰 상금을 걸었다.
길이가 N인 정수 배열 A와 B가 있다. 다음과 같이 함수 S를 정의하자.
S = A[0] × B[0] + ... + A[N-1] × B[N-1]
S의 값을 가장 작게 만들기 위해 A의 수를 재배열하자. 단, B에 있는 수는 재배열하면 안 된다.
S의 최솟값을 출력하는 프로그램을 작성하시오.
입력:
첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거나 같은 음이 아닌 정수이다.
출력:
첫째 줄에 S의 최솟값을 출력한다.
오답: 리스트 정렬
21) 32) 처음에는 i-1이 아닌 i를 썼었다.
그랬더니 alist 오름차순 정렬은 문제없었지만 blist 내림차순 정렬할떄 이상한 쓰레기값이 blist[0]에 들어있었다.
반복문을 돌면서 마지막 j+1이 N범위를 넘어가 그곳에 있던 쓰레기값이 앞으로 정렬된것 같다.
비교범위를 잘 설정해주면서 해결했다.
주의:
- C++에서는 배열의 크기를 컴파일 타임에 미리 결정해야 합니다.
- 하지만 N은 런타임에 입력받는 변수라서 int a_list[N];는 C++ 표준에서 허용되지 않습니다.
그니까 N을 입력받아서 리스트 크기를 설정할수 없다.
그래도 온라인gdb랑 백준에서는 잘 작동했다, 컴파일러마다 확장기능 뭐시기가 있어 가능하기도 하다나
해결방법은 vector로 하면 된다는데... 아직 벡터공부를 안해서 나중에 다시 해보겠다.
'코딩' 카테고리의 다른 글
[백준 C++] 11720번 - 숫자의 합 (0) | 2025.04.08 |
---|---|
[백준 C++] 10871번 - X보다 작은 수 (0) | 2025.04.01 |
[C] 배열과 구조체 (0) | 2025.03.24 |
[백준 C++] 2480번 - 주사위 세개 (0) | 2025.03.19 |
[백준 C++] 2525번 - 오븐시계 (0) | 2025.03.19 |