제 알고리즘은
1. 수열을 받아서 크기 순서대로 정렬
2. group 배열과 elem_cnt 배열 을 하나 만들고, 양자화 할 수 있는 값들을 저장 시킵니다.
3. 수열 값을 읽으면서 group에 값을 넣는데, 양자화 할 수 있는 수를 넘게 되면 최소 차이나는 값들을 하나의 값으로 합칩니다.
그 합친 값들에 해당하는 elem_cnt를 하나 증가시킨다.
4. 수열이 끝날때까지 연산을 계속한다.
5. calculate()를 통해 오차값을 구합니다.
Input :
1
9 3
1 744 755 4 897 902 890 6 777
Output :
650
(정답은 651)
calculate() 함수 내에서 값을 하나하나 찍어보니 이곳에서 오류가 발생했는데 이유를 모르겠습니다.
ret=13, arr[3]=744, group[1]=759, pow(arr[i]+group[j],2)=225, ret + pow(arr[i]+group[j])=238
ret=237, arr[4]=755, group[1]=759, pow(arr[i]+group[j],2)=16, ret + pow(arr[i]+group[j])=253
15^2 = 225 에 13을 더하면 238인데 ret가 237로 바꼈습니다...
제가 만든 calculate() 함수에서 ret 덧셈연산중 1오차가 생기는 것이 발생하여서 질문합니다. 제 코드를 돌리다보면 side effect가 생겨서 1의 오차가 생기는 것인지 아니면 연산중에 제가 1을 빼는 것인지 궁금합니다. 고수님들 가르쳐주세요..ㅠ
아래는 소스코드입니다.
pj4316
QUANTIZE 문제를 풀다가 왜 이런 결과가 되는지 궁금해서 질문드립니다....
제 알고리즘은
1. 수열을 받아서 크기 순서대로 정렬
2. group 배열과 elem_cnt 배열 을 하나 만들고, 양자화 할 수 있는 값들을 저장 시킵니다.
3. 수열 값을 읽으면서 group에 값을 넣는데, 양자화 할 수 있는 수를 넘게 되면 최소 차이나는 값들을 하나의 값으로 합칩니다.
그 합친 값들에 해당하는 elem_cnt를 하나 증가시킨다.
4. 수열이 끝날때까지 연산을 계속한다.
5. calculate()를 통해 오차값을 구합니다.
Input :
1
9 3
1 744 755 4 897 902 890 6 777
Output :
650
(정답은 651)
calculate() 함수 내에서 값을 하나하나 찍어보니 이곳에서 오류가 발생했는데 이유를 모르겠습니다.
ret=13, arr[3]=744, group[1]=759, pow(arr[i]+group[j],2)=225, ret + pow(arr[i]+group[j])=238
ret=237, arr[4]=755, group[1]=759, pow(arr[i]+group[j],2)=16, ret + pow(arr[i]+group[j])=253
15^2 = 225 에 13을 더하면 238인데 ret가 237로 바꼈습니다...
제가 만든 calculate() 함수에서 ret 덧셈연산중 1오차가 생기는 것이 발생하여서 질문합니다. 제 코드를 돌리다보면 side effect가 생겨서 1의 오차가 생기는 것인지 아니면 연산중에 제가 1을 빼는 것인지 궁금합니다. 고수님들 가르쳐주세요..ㅠ
아래는 소스코드입니다.
7년 전