프로그래머스 lv2 n^2 배열 자르기

namkun·2022년 8월 29일
0

코딩테스트

목록 보기
45/79

문제 링크

n^2 배열 자르기

풀이

  • 문제 명, 문제 설명은 함정이다.
  • 규칙성을 발견해야 풀 수 있다.
  • 나는 왼쪽 좌표가 (left / n, left % n) , 오른쪽 좌표가 (right / n , right % n), 그리고 2차원 배열에 들어갈 값은 좌표중에 큰값 + 1 이라는 규칙성을 발견하긴 했지만, 이는 문제를 푸는데 전혀 도움되지 않았다.
  • 좌표로 찾으면 결국엔 또 2차원 배열을 만들어야했기 때문이다.
  • 심지어 그걸 통해서 list건 array건 뭘 써도 주어진 left와 right의 값이 long값이라는걸 알고서는 기존에 내장메서드도 사용할 수 없게 되었다.
  • 결국 또 누군가가 찾아놓은 규칙성에 숟가락만 얹었다.
  • 처음 주어진 예제가 2에서 5까지라면 그에 맞는 값은 다음과 같다.
    범위 : |2|3|4|5|
    결과 : |3|2|2|3|
  • 위 경우에 순서대로 범위를 n으로 나눈 몫과 나머지를 비교해서 max값을 취하면 아래의 결과값이 나온다.
  • 두번째로 주어진 예시를 확인해보자
    범위 : |7|8|9|10|11|12|13|14|
    결과 : |4|3|3|3|4|4|4|4|
  • 이 경우에도 동일하게 적용되는 것을 알 수 있다.
  • 위의 규칙성을 갖고 코드를 짜봤다.
  class Solution {
    public int[] solution(int n, long left, long right) {
        int[] answer = new int[(int) (right - left) + 1];

        for (long i = left; i < right + 1; i++) {
            answer[(int) (i - left)] = (int) Math.max(i / n, i % n) + 1;
        }

        return answer;
    }
  }

소감

  • 문제에 낚시를 너무 잘 당한다
profile
개발하는 중국학과 사람

0개의 댓글