문제 링크 / level: Bronze II
https://www.acmicpc.net/problem/10093
내가 생각한 풀이
간밤에 짝꿍이랑 연습 겸 대결을 하면서 풀어본 문제.
난이도도 브론즈인데다가 문제가 너무 심플해서 5분컷 할 줄 알고 건드렸다가 런타임 에러에... 틀렸습니다에.. 아주 난리를 친 문제였다. 자세히 보면 정답 비율이 약 24%밖에 되지 않는 오묘한 문제다.
문제의 핵심은
1. 입력값의 범위를 잘 살펴야한다.
문제 조건을 보면 두 정수 A와 B가 주어진다. (1 ≤ A, B ≤ 1015, A와 B의 차이는 최대 100,000) 라고 적혀 있는데, 아무 생각 없이 int type으로 코드를 구현했다가는 바로 런타임 에러의 늪에 빠지고 말 것이다. Java의 경우 long type으로 잘 돌아간다.
2. A와 B 중 어떤 숫자가 더 큰지 모른다.
이것도 두 정수 A와 B가 주어진다. (1 ≤ A, B ≤ 1015, A와 B의 차이는 최대 100,000) 라는 조건에서 살펴봐야 하는 부분인데, 자세히 보면 A, B라고 되어있을 뿐 A<=B라든가 A<B라고 되어있지 않다. 즉, A와 B가 같은 상황이 있을 수도 있으며 A가 B보다 클 수도 있고, B가 A보다 클 수도 있는 것이다.
// 핵심 코드
// 두 수 사이에 있는 수의 개수
if (A == B) {
System.out.println(0);
} else {
System.out.println(Math.abs(A - B) - 1);
}
// 두 수 사이에 있는 수를 오름차순으로 출력
if (A > B) {
start = B;
end = A;
} else {
start = A;
end = B;
}
for (long i = start + 1; i < end; i++) {
System.out.print(i + " ");
}
나는 일단 A와 B가 같은 경우를 처음에 처리해줬고, 같지 않을 경우에는 절댓값을 이용해 처리해줬다.
근데 사실 나는 A보다 B가 크다고 생각해서 계속 틀렸었다. 위 코드는 나중에 B가 A보다 클 수도 있다는 사실을 깨달은 뒤에 수정한 코드다^_^
지금 보니 두 수 사이에 있는 수를 오름차순으로 출력하는 부분을 if와 else 대신 삼항연산자로 처리할 수도 있지 않을까 하는 생각이 든다. (그렇지만 귀찮으니 고쳐보진 않겠읍니다,,🙄)
아무튼 어찌저찌 통과. (휴,,)
앞으로는 입력 값 자체의 범위와 여러 가지 조건에 대해서 세세하고 꼼꼼하게 살펴봐야겠다는 깨달음을 얻은 대결이었다. 그리고 짝꿍과의 대결은 참 재미있었다^_^ 아자뵤!👊🔥
💌 전체 코드 보기:
'🥇Problem Solving (psS2mj) > BOJ' 카테고리의 다른 글
[BOJ] 1000. A+B (Python3) (0) | 2020.09.01 |
---|---|
[BOJ] 2740. 행렬 곱셈 (Java) (0) | 2020.05.28 |
[BOJ] 1110. 더하기 사이클 (Java) (0) | 2020.05.23 |
[BOJ] 14681. 사분면 고르기 (Java) (0) | 2020.05.23 |
[BOJ] 1205. 등수 구하기 (Java) (0) | 2020.05.22 |
댓글