Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 연습문제
- Vue
- JavaScript
- react
- 백준
- 우아한테크캠프
- Backtracking
- 데이터베이스
- Algorithm
- Database
- 탐색알고리즘
- Vue.js
- JPA
- codeground
- 웹프로그래밍
- SQL
- Spring
- 프레임워크
- 우아한형제들
- Java
- BAEKJOON
- TypeScript
- springboot
- 단위테스트
- 알고리즘
- BFS
- DFS
- framework
- BOJ
- mobx
Archives
- Today
- Total
설모의 기록
[백준 14919] 분포표 만들기 본문
이 문제는 1 / m 만큼씩 1을 나눠 구간을 만들고 그 다음으로 주어지는 숫자들을 그 구간별로 나눈 후, 구간별로 몇 개의 숫자가 존재하는지 출력하는 문제입니다. 쉽다고 생각하고 몇번이나 코드를 제출했지만 계속 '틀렸습니다' 만 반복해서 대체 왜 그러는건가 double 에 대해 찾아봤습니다. 알게된 내용은 다음과 같습니다.
컴퓨터가 숫자를 처리할 때에는 1.xxxxx(지수부) * 2^(가수부) 로 인식하기 때문에 2의 배수가 아니거나 소수인 값은 내가 저장한 값이 그대로 저장되지 않는 경우가 있다고 합니다. 이 상황에서 오차가 발생하기 때문에 그 오차를 해결하는 과정을 확인하기 위한 문제였다고 볼 수 있습니다. 예를 들어, double a = 0.1; 이러한 코드를 작성하였다 해도 a에는 0.1 이 아니라 0.1000000001 와 같은 값이 저장될 수 있다고 합니다. 따라서 이 오차를 해결하기 위해서 아래의 코드에서 0.0000000001 값을 더했습니다.
또한 각 구간이 T로 나눈 값이기 때문에 각 부등식에 T를 곱하면 계산이 수월해집니다. 따라서 입력값에 0.0000000001 를 더한 후 T를 곱한 뒤 int형으로 타입캐스팅을 하면 정수부분만이 나옵니다. 즉, 배열의 인덱스 값이 나오게 되는 것이죠. 그래서 이 인덱스에 1씩 더해주면 그 구간에서의 숫자의 개수가 되게 됩니다.
'알고리즘' 카테고리의 다른 글
[백준1987] 알파벳 (0) | 2018.05.04 |
---|---|
[백준 1012] 유기농 배추 (0) | 2018.05.02 |
[백준 6603] 로또 (0) | 2018.05.02 |
[백준 1389] 케빈 베이컨의 6단계 법칙 (0) | 2018.05.02 |
[백준 14500] 테트로미노 (4) | 2018.04.15 |