반응형
# 문제 출제 사이트
https://www.acmicpc.net/problem/2420
# 문제
사파리월드는 인터넷으로만 존재하는 미스테리한 나라이다.
사파리월드에는 2개의 서브도메인이 seunghwan.royal.gov.sw와 kyuhyun.royal.gov.sw 이 있는데,
이것이 couple.royal.gov.sw으로 합쳐질 것이다.
그러나 도메인 관리 센터 SWNIC(센터장: 김동규)에는 엄격한 룰이 있다.
두 서브도메인을 합칠 때, 유명도의 차이가 너무 차이나지 않을 경우에만 두 서브도메인을 결혼시키는 것이다.
서브도메인의 유명도는 정수이다.
두 서브도메인의 유명도가 주어졌을 때, 그 차이를 구하는 프로그램을 작성하시오.
# 입력
첫째 줄에 두 도메인의 유명도 N과 M이 주어진다. (-2,000,000,000 ≤ N, M ≤ 2,000,000,000)
# 출력
첫째 줄에 두 유명도의 차이 (|N-M|)을 출력한다.
# 제출한 소스코드
더보기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
Long n = Long.parseLong(st.nextToken());
Long m = Long.parseLong(st.nextToken());
Long result;
if (n < 0) {
result = -n + m;
} else if (m < 0) {
result = n + -m;
} else {
result = -n + -m;
}
System.out.println(result);
}
}
- n이 음수이면 처리하는 경우의 수와 m이 음수일 때 경우의 수를 처리하는 방식으로 접근했었다.
else에 둘 다 음수일 때 처리하는 방법을 추가했었다. - 너무 복잡하게 생각하고 있었고 문제에 정답에 대한 해답이 있었는데 제대로 파악하지 못했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
Long n = Long.parseLong(st.nextToken());
Long m = Long.parseLong(st.nextToken());
Long result = 0L;
if (n < 0 && m < 0) {
result = -n - -m;
} else if (n < 0) {
result = -n + m;
}else if (m < 0) {
result = n + -m;
}
System.out.println(result);
}
}
- n과 m이 둘 다 음수일 때 처리하는 경우의 수를 다시 생각해서 수정한 조건문이다.
역시나 틀렸다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
Long n = Long.parseLong(st.nextToken());
Long m = Long.parseLong(st.nextToken());
Long result = n - m;
if (result < 0) {
result = -result;
}
System.out.println(result);
}
}
- 입력되는 값이 범위가 -2,000,000,000 ≤ N, M ≤ 2,000,000,000 이기 때문에 Long으로 파싱 후 값을 할당한다.
- n - m 의 값을 출력하면 된다.
- result가 음수이면 양수로 바꿔서 출력하게 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
Long n = Long.parseLong(st.nextToken());
Long m = Long.parseLong(st.nextToken());
Long result = n - m;
System.out.println(result < 0 ? -result : result);
}
}
- 3항 연산자를 사용해서 코드를 간추려봤습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
Long n = Long.parseLong(st.nextToken());
Long m = Long.parseLong(st.nextToken());
System.out.println(n - m < 0 ? -(n - m) : n - m);
}
}
- result에 값을 할당 안하고 바로 연산을 해서 출력하도록 해봤습니다.
- 코드 라인수는 줄었지만 가독성이 안좋아보이네요.
반응형