알고리듬 문제를 풀며

서정한·2023년 8월 3일
0

내일배움캠프 7기

목록 보기
20/66

Intro

  • 오늘도 알고리듬문제를 2개 풀었다. 첫번재 문제는 배열에서 나보다 큰 키를 가진사람의 숫자를 return 해주는문제였다. 이 문제는 편하게 해결. 그런데 2차원 좌표평면에서 직사각형의 넓이를 구하는문제에서 생각보다 잘안풀렸다.

문제설명(프로그래머스 알고리듬 문제)

  • 직사각형 넓이 구하기

    • 2차원 좌표 평면에 변이 축과 평행한 직사각형이 있습니다. 직사각형 네 꼭짓점의 좌표 [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]가 담겨있는 배열 dots가 매개변수로 주어질 때, 직사각형의 넓이를 return 하도록 solution 함수를 완성해보세요.
    • 제한사항
      • dots의 길이 = 4
      • dots의 원소의 길이 = 2
      • 256 < dots[i]의 원소 < 256
      • 잘못된 입력은 주어지지 않습니다.
    • 입출력 예
      dots: [[1, 1], [2, 1], [2, 2], [1, 2]]
      result: 1
      dots: [[-1, -1], [1, 1], [1, -1], [-1, 1]]
      result: 4
  • 자세한 문제설명은 여기

내 접근방법

  • 처음에는 좌표평면에 변이 축과 평행하다는 것을 인지하지 못했다.(문제를 잘 풀기위해서는 문제를 잘 읽어야되는데 그러질 않았다.. 반성..!) 그래서 아무 좌표나 잡고 아주 단순하게 입출력 예에서 나온 그대로 dots[1][0] - dots[0][0] 을 한 변의 길이로 잡는 단순한 행동을했다. 그리고 돌렸는데 왠걸? 답이 틀렸다고나온다.
  • 그래서 생각해보니 좌표는 랜덤하게 찍히는데 아무생각없이 아무좌표 두개 불러다가 x값 구하고 y값구하고해서 계산을 하려고하니 올바른 답이 나올리 만무했다. 그리고 좌표값에는 -도 포함되어있는데 이부분이 전혀 고려되지 않았다. 그래서 이부분은 abs를 사용하여 절대값계산으로 처리해야겠다고 생각했다.
  • 그 후 문제를 다시한번 읽어보니 변이 축과 평행하다고 했다. 그 말은 x든 y든 같은 값이 반드시 존재할 수 밖에 없는것이고, 그렇기때문에 이것만 걸러주고 abs를 사용하면 x, y의 변 길이를 구할 수 있게된다는 것이다. 유레카!
  • 위의 내용을 적용한 수식은 아래와 같다.
import kotlin.math.abs

class Solution {
    fun solution(dots: Array<IntArray>): Int {
        var answer: Int = 0
        var x : Int = 0
        var y : Int = 0
        for(i in 0 until dots.size - 1) {
            if(dots[i][0] != dots[i+1][0]) {
                x = abs(dots[i][0] - dots[i+1][0])
            }
            
            if(dots[i][1] != dots[i+1][1]) {
                y = abs(dots[i][1] - dots[i+1][1])
            }
        }
        answer = x*y
        return answer
    }
}

Outro

  • 문제를 잘 읽자! 정말 잘 읽어야 한다. 취직후에 일할때에도 문제를 잘 파악해야 헛수고를 하지 않을 수 있겠다는것을 다시금 깨닫는 시간이었다.
  • 너무 컴파일러만믿고 내 머리를 쓰지 않으려는 행동을 멈춰야겠다. 오류나면 컴파일러가 잡아주고, 클레스 안에 뭐가있는지 어떻게쓰는지 IDE가 너무 좋아져서 다 알려주는데 이러다보니 내가 직접 생각하는 것보다 일단 그냥 돌려보자는 무책임한 생각(난 이게 내 코드에대한 무책임한 생각이라고 느껴졌다)이 들었고, 그러지 말아야겠다고 생각했다. 내 머리속에서 검증이 끝난 코드를 컴퓨터가 테스트하도록 도와주는 형태여야 내가 이해하고 쓰는 코드가 되기 때문이다. 끗!
profile
잘부탁드립니다!

0개의 댓글