본문 바로가기
JAVA/코딩테스트

Softeer 연습문제(JAVA) Level 1. 연탄 배달의 시작

by Gina Sim 2024. 10. 21.

 

문제설명

산타는 연탄 배달을 시작하려고 합니다. 이 도시에는 n개의 마을이 있고, 각 마을은 1차 수직선 상에 위치하고 있습니다.

 

 

 

 

산타는 이 마을들 중 가장 거리가 가까운 두 마을을 먼저 방문한다고 했을 때, 산타가 처음 방문할 가능성이 있는 서로 다른 두 마을 조합의 수를 구하는 프로그램을 작성해보세요.

 

제약조건

2 ≤ n ≤ 1,000
1 ≤ 마을의 위치 ≤ 1,000,000

 

입력형식

첫 번째 줄에는 마을의 수를 나타내는 n이 주어집니다.
두 번째 줄에는 n개의 마을의 위치가 공백을 사이에 두고 주어집니다. 마을의 위치는 서로 다르며, 이 위치들은 오름차순으로 주어진다고 가정해도 좋습니다.

 

출력형식

첫 번째 줄에 산타가 처음 방문할 가능성이 있는 서로 다른 두 마을 조합의 수를 출력합니다.

 

예제

입력예제1
5 1 3 5 8 10

출력예제1
3

//첫 번째 예제에서 가장 가까운 두 마을간의 거리는 2입니다. 
//이것이 가능한 두 마을 위치의 조합은 {1, 3}, {3, 5}, {8, 10} 이렇게 3개이기에 답은 3이 됩니다.

입력예제2
5 1 3 5 7 8

출력예제2
1

//두 번째 예제에서 가장 가까운 두 마을간의 거리는 1입니다. 
//이것이 가능한 두 마을 위치의 조합은 {7, 8} 밖에 없기에 답은 1이 됩니다.
 

 

 

제출답안

import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = Integer.valueOf(sc.nextLine());
        //System.out.println(n);
        String loc = sc.nextLine();
        //System.out.println(loc);

        int[] locList = Arrays.stream(loc.split(" ")).mapToInt(Integer::parseInt).toArray();
        int[] distanceArr = new int[n-1];
        int distance = 0;
        int minDistance = 1000000;
        int combination = 1;
        
        for(int i=0; i<n-1; i++){
            distance = locList[i+1]-locList[i];
            if(distance<minDistance){
                minDistance = distance;
                combination = 1;
            }else if(distance == minDistance){
                combination ++;
            }else{
                continue;
            }
        }
        System.out.print(combination);
        sc.close();
    }
}

 

회고

  • 반복문을 최대한 안쓰고 코드를 구현하려다가 꽤 애먹었음
  • Python이 원래 주 사용 언어여서 list 사용이 가장 편했는데, java는 array를 많이 사용하는 듯 하여 아직 적응이 잘 안됨
  • 새로 알게 된 것
    • Array생성, stream, map 등 - array와 관련하여 공부 필요할듯
  • 계속 실수하는 부분
    • python 과 달리 변수를 선언할때, 변수 앞에 자료형식 언급해줘야하는데 빼먹음 (int, String 등)
  • 원래 각 마을의 거리도 리스트 형태로 만들어서 max 값을 뽑으려다가 list 선언하는것도 적응이 잘 안되고, max 값 뽑는것도 중복값 처리 등 알아볼게 많아서 접근 방법 바꿈.
    • for문 안에서 바로바로 거리 값을 계산해서, 제일 가까운 거리 찾고, 중복값 있을 경우 조합 수(combination)을 +1
    • 만약 최소값이 바뀌는 경우 combination 이 초기화 되어야 하므로, 'distance<minDistance' 조건문에 combination 값을 1로 초기화 하는 코드 추가
반응형

댓글