코북
Keep going
코북
전체 방문자
오늘
어제
  • 분류 전체보기 (114)
    • Computer Science (20)
      • 인터넷 (10)
      • 운영체제 및 일반지식 (4)
      • 공통 요구사항 (4)
      • WAS (2)
    • DataBase (18)
    • JavaScript (22)
    • Spring (15)
    • Java (4)
    • ASP.NET (5)
    • C# (6)
    • 알고리즘 (8)
    • HTML5 + CSS (5)
    • Git & GitHub (5)
    • Machine Learning (5)
    • 좋은 글 공유 (1)

최근 글

최근 댓글

티스토리

hELLO · Designed By 정상우.
코북

Keep going

[Java] 가까운 거리 찾기 (1차원)
알고리즘

[Java] 가까운 거리 찾기 (1차원)

2022. 2. 8. 14:52

 

 안녕하세요 코북입니다. 학원 다닐 때 풀었을 때 꽤나 어렵다고 생각했던 문제였는데, 다시 풀어보니 역시나 헷갈렸습니다. 예전만큼 헤매지는 않았지만 부족한 점이 많다고 생각돼 기록하러 왔습니다. 다음은 첫 번째 풀이입니다.

 

public class Java16 {
	public static void main(String[] args) {
		int[] point = {92, 32, 52, 9, 81, 2, 68};

		// 거리 값을 저장할 배열
		int size = 0; // 배열 크기
		for(int i=1; i<point.length; i++) 
		{
			size += i;
		}
		// System.out.println(size);
		int[] dis = new int[size];

		int min = 0; // dis 인덱스 번호
		int a = 0; // point 인덱스 번호1
		int b = 0; // point 인덱스 번호2
		
		for(int i = 0, k = 0; i<point.length; i++) 
		{
			for(int j = i+1; j<point.length; j++, k++)
			{
				dis[k] = Math.abs(point[i]-point[j]); // 거리의 절대값
				 
				if(dis[min]>dis[k]) // 최솟값 구하기
				{
					min = k; //** 작을 때 값을 바꿔줘야함
					a = i;
					b = j;
				}
			}
		}
		
		System.out.println(min); // 최솟값인 경우 dis의 인덱스 번호
		System.out.println(dis[min]); // 거리 최솟값 
		System.out.println("result = [" + a +", "+ b + "]"); // 최솟값인 두 점
		
		
	}
}

 

 처음 풀었을 때는 위와 같이 거리 값을 저장할 배열은 만든 후에 배열에 값을 집어넣으면서 최솟값을 찾으려 하였습니다. 또한 최솟값을 찾을 때 비교 값을 변경해주지 않아 최솟값 또한 찾지 못하는 오류가 있었습니다. 이 부분들을 놓친 이유는 최솟값을 구하는 방법에 대한 개념이 정확하게 정리되지 않았기 때문인 것 같습니다. 그렇기 때문에 불필요한 배열을 만들었고 최솟값을 제대로 찾는 것도 실패했습니다. 다음은 두 번째 풀이입니다.

 

public class Java16_2 {
	public static void main(String[] agrs) {
		int[] point = {92, 32, 52, 9, 81, 2, 68};
		
		int a = 0;
		int b = 0;
		int dis = Math.abs(point[0]-point[1]);
		
		for(int i=0; i<point.length; i++) 
		{
			for(int j=i+1; j<point.length; j++)
			{
				int min = Math.abs(point[i]-point[j]);
				
				if(dis>min) 
				{
					dis = min;
					a=i;
					b=j;
				}
			}			
		}
		
		System.out.println("result = [" + a +", "+ b + "]");
		
	}
}

 

 불필요한 과정을 제거하여 훨씬 코드가 간결해졌습니다. + Math.abs()는 절대값을 구하는 메소드입니다.

 

 

저작자표시 비영리 동일조건

'알고리즘' 카테고리의 다른 글

[Java] 버블정렬(Bubble sort)  (0) 2022.02.10
[Java] 10진수 2진수로 변환  (0) 2022.02.08
[Java]수열 n번째 항까지 출력  (0) 2022.02.01
[Java]소인수분해  (0) 2022.01.25
[Java]팩토리얼 - 재귀 함수  (0) 2022.01.24
    '알고리즘' 카테고리의 다른 글
    • [Java] 버블정렬(Bubble sort)
    • [Java] 10진수 2진수로 변환
    • [Java]수열 n번째 항까지 출력
    • [Java]소인수분해
    코북
    코북

    티스토리툴바