Recent Posts
Recent Comments
Link
- Today
- Yesterday
- Total
메이쁘
(JAVA) 백준 2033번 : 반올림 --- [수학, 구현] 본문
https://www.acmicpc.net/problem/2033
안녕하세요.
구현인 줄 알았다가 수학까지 하게된 문제입니다.
이 문제는 간단해서 소스코드만 참고해도 이해하실 수 있다고 생각합니다.
아!
저는 정수형으로 풀지 않고 문자형으로 변환해서 숫자 하나하나 접근하는 방식을 사용했습니다.
그런데 여기서는 시간이 더 걸리더라구요.
이렇게 접근하는 방법은 아마 정수형으로 사용할 수 없는 문자열 길이에 사용하면 적합할 것 같습니다.
그렇기 때문에
가장 메모리와 시간이 낮은 정답 소스코드도 함께 첨부하겠습니다.
*** 출처는 @author 로 남겼습니다. 감사합니다.
- 수학적 방식으로 접근한 코드
/** 수학 식으로 접근하는 방법
* @author devetude
// 비교 변수 초기화
int comp = 10;
// 루프를 돌며 문제의 조건에 맞게 반올림 실행
while (N > comp) {
int nModComp = N % comp;
if (nModComp * 10 / comp >= 5) {
N += comp;
}
N -= nModComp;
comp *= 10;
}
*/
필자의 소스코드(문자형 접근)
import java.util.Scanner;
// 수학, 구현
// 반올림
public class p2033 {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
char[] chArr = str.toCharArray();
int len = chArr.length;
int nextAdd = 0;
StringBuilder sb = new StringBuilder();
// 일의 자리부터 거슬러 올라가야 하므로 역순 탐색
for(int i = len - 1; i >= 1; i--) {
int num = (int) chArr[i] - '0';
int nowNum = num + nextAdd;
nextAdd = nowNum >= 5 ? 1 : 0;
sb.append(0);
}
// 가장 맨 앞자리부터 반올림한 결과 얻기
sb.insert(0, (int)(chArr[0] - '0') + nextAdd);
System.out.println(sb.toString());
}
}
감사합니다.
'Algorithm > Baekjoon' 카테고리의 다른 글
(JAVA) 백준 4358번 : 생태학 --- [문자열] (0) | 2020.09.19 |
---|---|
(JAVA) 백준 2224번 : 명제 증명 --- [플로이드 - 와샬] (0) | 2020.09.17 |
(JAVA) 백준 1613번 : 역사 --- [플로이드 - 와샬] (0) | 2020.09.17 |
(JAVA) 백준 2096번 : 내려가기 --- [슬라이딩 윈도우, DP] (0) | 2020.09.16 |
(JAVA) 백준 10217번 : KCM Travel --- [다익스트라, DP] (5) | 2020.09.14 |
Comments