코딩

[백준 c++] 1026번 - 보물

goosong 2025. 3. 26. 00:24

 

문제:

옛날 옛적에 수학이 항상 큰 골칫거리였던 나라가 있었다. 이 나라의 국왕 김지민은 다음과 같은 문제를 내고 큰 상금을 걸었다.

길이가 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