https://school.programmers.co.kr/learn/courses/30/lessons/161990
이 문제는 이것저것 삽질을 했지만 정말 간단하게 풀이가 되었습니다.
우리가 구해야 하는 값은 최소 길이로 드레그를해서 파일을 선택해야 합니다.
드레그 시작점은 최상단 좌측이 될것이고, 드레그 마지막 지점은 최하단 우측이 될것입니다
국어적으로는 최상단 좌측, 최하단 우측이고 수치로 계산했을 때는
시작점 -> # 위치 중 x,y가 가장 작은 값
끝점 -> # 위치 중 x,y의 값이 가장 큰 값
을 최종적으로 구하면 되는 문제입니다.
아래는 최종 코드
public static int[] Solution(string[] wallpaper)
{
// 반환값 초기 선언
int[] answer = new int[] {int.MaxValue,int.MaxValue,0,0};
for (int i = 0; i < wallpaper.Length; i++)
{
for(int j = 0; j < wallpaper[i].Length; j++)
{
if (wallpaper[i][j].ToString() == "#")
{
// 최소 최대 함수 사용하여 대소 구분
answer[0] = Math.Min(answer[0], i);
answer[1] = Math.Min(answer[1], j);
answer[2] = Math.Max(answer[2], i + 1);
answer[3] = Math.Max(answer[3], j + 1);
}
}
}
return answer;
}
주의 할점은 끝점인 경우 x와 y값의 +1씨을 해줘야 되는 점!
이유는 아래 사진처럼 끝점이 파일의 우측 하단에 위치해야 하기 때문이죠
처음에는 조건문을 마구 써서 지금 보다는 긴 코드로 완성이 되었는데
찾아보니 Math 함수를 사용하여 짧게 비교가 가능한 방법이 있었습니다.
다음에도 대소 비교가 나왔을 때 조건문으로 처리하기 번거롭다면 Math 함수를 사용하는 것도 좋은 방법일 거 같습니다. ㅎㅎ
'백준, 프로그래머스' 카테고리의 다른 글
[프로그래머스] swift 코딩 기초 트레이닝(0레벨) 1회차 (0) | 2024.05.20 |
---|---|
[프로그래머스] 대충 만든 자판 C# (0) | 2024.05.16 |
[백준] 비전공자 Unity 개발자 백준 100문제 후기 (0) | 2022.11.04 |
[백준] c# 1269 대칭 차집합 (배열의 차집합) (0) | 2022.09.05 |
C# [백준] 알고리즘 공부 준비하기 Visual Studio 세팅하기 (0) | 2022.08.08 |