문제풀이(Problem Solving)

주어진 좌표에서 가장 가까운 값 추출하기 - C#, Unity

게임이 더 좋아 2021. 5. 30. 06:12
반응형
728x170

물론 어렵진 않았고 어떻게 해야할 지는 알았으나

언어를 많이 배우면 단점이... 내가 아는 함수가 이 언어에도 있나? 파라미터는 다르지 않나? 헤더를 include인가?

import인가?? 가 헷갈린다.

 

https://www.codingame.com/ide/puzzle/defibrillators

 

 


 

아무튼 어렵진 않았다.

# 풀이

using System;
using System.Linq;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;

/**
 * Auto-generated code below aims at helping you parse
 * the standard input according to the problem statement.
 **/
class Solution
{
    static void Main(string[] args)
    {
        string LON = Console.ReadLine();
        string LAT = Console.ReadLine();
        LON = LON.Replace(',','.');
        LAT = LAT.Replace(',','.');

        double lon = double.Parse(LON, CultureInfo.InvariantCulture.NumberFormat);
        double lat = double.Parse(LAT, CultureInfo.InvariantCulture.NumberFormat);
        double m = 1000;
        string ans = "";

        int N = int.Parse(Console.ReadLine());

        for (int i = 0; i < N; i++)
        {
            string DEFIB = Console.ReadLine();
            
            string[] data = DEFIB.Split(';'); // **

            double targetLON = double.Parse(data[4].Replace(',','.'), CultureInfo.InvariantCulture.NumberFormat);
            double targetLAT = double.Parse(data[5].Replace(',','.'), CultureInfo.InvariantCulture.NumberFormat);

            double nx = (targetLON-lon) * Math.Cos((targetLAT +lat)/2);
            double ny = (targetLAT - lat);

            double dist = Math.Sqrt(Math.Pow(nx,2)+Math.Pow(ny,2));

            if(m>dist){
                m = dist;
                ans = data[1];
            }

        }

        // Write an answer using Console.WriteLine()
        // To debug: Console.Error.WriteLine("Debug messages...");

        Console.WriteLine(ans);
    }
}

 

중요한 포인트만 집고 넘어가보자

 

0. str.split('문자' 또는 "문자열") 을 이용하여 나누었다.

 

리턴이 어떻게 되는지를 주목해야 한다.

string []  문자열 배열로 받는다.

 

1. float도 4byte다. 많은 소수점 자리를 표현하기 위해선 double을 써야한다.

float.Parse("41.00027357629127", CultureInfo.InvariantCulture.NumberFormat);  (X)

double.Parse("41.00027357629127", CultureInfo.InvariantCulture.NumberFormat); (O)

또한 using System.Globalization;을 써야 제대로 작동한다.

 

 

2. str.replace("필터 문자열", "내가 바꿀문자열") 로 comma를 period로 바꿨다.

 

 

3. 최소값이므로 최솟값 필터를 넣어서 입력되는 값이 갱신되어도 최소값의 데이터만 유지하게 했다.

 

 

 

728x90
반응형
그리드형

'문제풀이(Problem Solving)' 카테고리의 다른 글

백준, BOJ, 2684번 C++ [CPP]  (0) 2021.05.31
백준, BOJ, 1793번 C++ [CPP]  (0) 2021.05.30
백준, BOJ, 2108번 C++ [CPP]  (0) 2021.05.27
백준, BOJ, 9095번 C++ [CPP]  (0) 2021.05.27
백준, BOJ, 1463번 C++ [CPP]  (0) 2021.05.27