Dev/알고리즘

알고리즘 - 10주 완성 알고리즘 코딩테스트 (코딩몬스터) : 데스티니

GeekCoder 2021. 10. 7. 00:04

이직하고 리액트, 엘라스틱서치, 노드js를 공부하고 개발하느라 블로그에도 소홀해지고 알고리즘 공부도 하지 못하였다. 대신 자바스크립트나 리액트에 대하여 많은 공부를 할 수 있었던 것 같다.

 

코딩몬스터 님이 구름에듀에서 진행하는 알고리즘 코딩테스트 강의가 개편되고 있어 다시 강의를 듣기 시작하였다.

 

문제를 유출할 수 없으니 앞으로 내가 풀었던 문제들의 정답만 올리도록 하겠다.

 

문제2F - 데스티니
import java.io.*;
import java.lang.*;
import java.util.*;


public class Main {
	public static final Scanner scanner = new Scanner(System.in);

	public static void main(String[] args)
	{
		int n = scanner.nextInt();
		Point2D[] points = new Point2D[n];

		for(int i = 0 ; i < n ; i++)
		{
			int x=  scanner.nextInt();
			int y=  scanner.nextInt();
			points[i] = new Point2D(x, y);
		}
		double mind = 1000000000;
		int cnt = 0;
			
		for(int i = 0 ; i < n ; i++)
		{
			for(int j = i+1 ; j< n ; j++){
				double sqd = points[i].getDistanceTo(points[j]);
				if(sqd < mind)
				{
					mind = sqd;
					cnt= 1;
				}
				else if(sqd == mind)
				{
					cnt++;
				}
			}
		}
		System.out.println(String.format("%.1f", mind));
		System.out.println(cnt);
	}
}

class Point2D{
	int x;
	int y;
	public Point2D(int x, int y)
	{
		this.x = x;
		this.y = y;
	}

	/**
	 * 2차원 평면 상에서 점 this부터 점 target까지 거리의 제곱을 계산하는 함수
	 * @param target
	 * @return
	 */
	public int getSquaredDistanceTo(Point2D target)
	{
		int dx = Math.abs(target.x - this.x);
		int dy = Math.abs(target.y - this.y);
		return dx * dx + dy * dy;
	}

	public double getDistanceTo(Point2D target)
	{
		double sqd = (double) this.getSquaredDistanceTo(target);
		return Math.sqrt(sqd);
	}

}