본문 바로가기
🥇Problem Solving (psS2mj)/BOJ

[BOJ] 10093. 숫자 (Java)

by psS2mj 2020. 5. 24.
반응형

문제 링크 / level: Bronze II

https://www.acmicpc.net/problem/10093

 

10093번: 숫자

문제 두 양의 정수가 주어졌을 때, 두 수 사이에 있는 정수를 모두 출력하는 프로그램을 작성하시오. 입력 두 정수 A와 B가 주어진다. (1 ≤ A, B ≤ 1015, A와 B의 차이는 최대 100,000) 출력 첫째 줄에 �

www.acmicpc.net

 

 

내가 생각한 풀이

간밤에 짝꿍이랑 연습 겸 대결을 하면서 풀어본 문제.

난이도도 브론즈인데다가 문제가 너무 심플해서 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 대신 삼항연산자로 처리할 수도 있지 않을까 하는 생각이 든다. (그렇지만 귀찮으니 고쳐보진 않겠읍니다,,🙄)

 

진짜... 이 문제가 뭐라고...😂💦

아무튼 어찌저찌 통과. (휴,,)

앞으로는 입력 값 자체의 범위와 여러 가지 조건에 대해서 세세하고 꼼꼼하게 살펴봐야겠다는 깨달음을 얻은 대결이었다. 그리고 짝꿍과의 대결은 참 재미있었다^_^ 아자뵤!👊🔥

 

 

 

💌 전체 코드 보기:

https://github.com/psS2mj/Problem_Solving_BOJ_by_JAVA/blob/master/Bronze/Main_10093_%EC%88%AB%EC%9E%90.java

 

psS2mj/Problem_Solving_BOJ_by_JAVA

BAEKJOON Online Judge (https://www.acmicpc.net) by JAVA - psS2mj/Problem_Solving_BOJ_by_JAVA

github.com

반응형

댓글