# 문제 출제 사이트

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

 

2420번: 사파리월드

첫째 줄에 두 도메인의 유명도 N과 M이 주어진다. (-2,000,000,000 ≤ N, M ≤ 2,000,000,000)

www.acmicpc.net

 

# 문제

사파리월드는 인터넷으로만 존재하는 미스테리한 나라이다.

사파리월드에는 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에 값을 할당 안하고 바로 연산을 해서 출력하도록 해봤습니다.
  • 코드 라인수는 줄었지만 가독성이 안좋아보이네요.
반응형

+ Recent posts