문제설명
산타는 연탄 배달을 시작하려고 합니다. 이 도시에는 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로 초기화 하는 코드 추가
반응형
'JAVA > 코딩테스트' 카테고리의 다른 글
Softeer 연습문제(JAVA) Level 1. 나무 심기 (0) | 2024.10.22 |
---|---|
Softeer 연습문제(JAVA) Level 1. [한양대 HCPC 2023] Tren del Fin del Mundo (0) | 2024.10.22 |
Softeer 연습문제(JAVA) Level 1. [한양대 HCPC 2023] 개표 (0) | 2024.10.21 |
Softeer 연습문제(JAVA) Level 1. 주행거리 비교하기 (0) | 2024.10.21 |
Softeer 연습문제(JAVA) Level 1. 근무시간 (0) | 2024.10.21 |
댓글