[코드트리]좋은 전략을 추려내기 / 연속된 숫자 만들기 2
나의 풀이 코드
import java.util.*;
import java.util.Collection;
public class Main {
public static void main(String[] args) {
// 입력
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
// 3명의 사람이 일직선 위에 있음
// 양쪽 끝에 있는 사람중 하나를 골라
// 남은 두명 사이로 이동시키는것을 반복
// 이때 연속된 숫자가 되도록 만드는 최소 이동 횟수 구하기
// 케이스
// 1. 3명 모두 이미 연속된 숫자로 서있는 경우
// 2. 2명이 이미 연속된 숫자로 서있는 경우
// 3. 아무도 연속된 숫자로 서있지 않는 경우
// 1.
// 리스트에 넣고 정렬
// 각 요소별 하나씩 빼서 1나오면\
// 0을 출력한다.
List<Integer> list = new ArrayList<>();
list.add(a);
list.add(b);
list.add(c);
Collections.sort(list);
if((list.get(0) - list.get(1) == -1) && (list.get(1) - list.get(2) == -1)) {
System.out.println(0);
return;
}
// 2.
if((list.get(0) - list.get(1) == -1) ) {
if(list.get(2) - list.get(1) < 3) {
System.out.println(1);
return;
} else {
System.out.println(2);
return;
}
} else if((list.get(1) - list.get(2) == -1)) {
if(list.get(1) - list.get(0) < 3) {
System.out.println(1);
return;
} else {
System.out.println(2);
return;
}
}
// 3.
// 셋중에서 가까운 두명을 찾기
// 가까운 두명의 거리가 3이하이면 1출력
// 가까운 두명의 거리가 3이상이면 2출력
// 만약 셋 다 거리가 일정하면
// 거리가 3이하이면 1출력
// 거리가 3이상이면 2출력
if(list.get(2)-list.get(1) > list.get(1)-list.get(0)) {
if(list.get(1)-list.get(0) < 3) {
System.out.println(1);
return;
} else {
System.out.println(2);
return;
}
} else if (list.get(2)-list.get(1) < list.get(1)-list.get(0)) {
if(list.get(2)-list.get(1) < 3) {
System.out.println(1);
return;
} else {
System.out.println(2);
return;
}
} else {
if(list.get(1)-list.get(0) < 3) {
System.out.println(1);
return;
} else {
System.out.println(2);
return;
}
}
}
}
해설을 보니… 입력을 제외하고 7줄로 풀었다.. 내가 센스가 부족한가..? 일단 푸는거에 초점을 두고 계속 풀자 ㅠㅠ
Leave a comment