[Java Algorithm] 프로그래머스 Lv.2_ 카펫

2025. 8. 4. 19:58·Algorithm Study

[문제]

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항
- 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
- 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
- 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

 

[Algorithm]

전체 카펫 개수를 구하고 (brown + yellow) 가능한 세로 길이를 3부터 √total까지 반복

각 세로 길이에 대해 가로 길이 계산 (total / height)

계산된 노란색 영역이 주어진 yellow랑 일치하는지 확인

 

[Code]

class Solution {
    public int[] solution(int brown, int yellow) {
        int total = brown + yellow;
        
        for(int h = 3; h <= Math.sqrt(total); h++) {
            if(total % h == 0) {
                int w = total / h;
                
                int yellowCount = (w - 2) * (h - 2);
                
                if(yellowCount == yellow) {
                    return new int[]{w, h};
                }
            } 
        }
        return new int[]{0, 0};
    }
}

 

[+ 다른 사람 풀이]

import java.util.*;

class Solution {
    public int[] solution(int brown, int yellow) {
        int a = (brown+4)/2;
        int b = yellow+2*a-4;
        int[] answer = {(int)(a+Math.sqrt(a*a-4*b))/2,(int)(a-Math.sqrt(a*a-4*b))/2};
        return answer;
    }
}

 

이건 문제 개편 이전 풀이인데 뭐가 정확히 달라진지는 모르겠음 ..

위 코드는 근의 공식을 이용한 코드

노란색 카펫 공식을 전개하면

(width-2) × (height-2) = yellow
width × height - 2×width - 2×height + 4 = yellow
(brown + yellow) - 2×(width + height) + 4 = yellow
brown + 4 = 2×(width + height)

 

 

따라서 width + height = (brown + 4) / 2

 

int a = (brown+4)/2;  // a = width + height
int b = yellow+2*a-4;  // 이차방정식의 상수항
 

b 값은 다음과 같이 유도

width × height = brown + yellow

width + height = a이므로

이차방정식: x² - ax + (brown + yellow) = 0에서

width × height = yellow + 2a - 4로 변형된 형태

 

int[] answer = {
    (int)(a+Math.sqrt(a*a-4*b))/2,  // 더 큰 값 (가로)
    (int)(a-Math.sqrt(a*a-4*b))/2   // 더 작은 값 (세로)
};

이차방정식 x² - ax + b = 0의 해

→ x = (a ± √(a² - 4b)) / 2

저작자표시 변경금지 (새창열림)

'Algorithm Study' 카테고리의 다른 글

[Java Algorithm] 프로그래머스 Lv.2_ 피로도  (4) 2025.08.05
[Java Algorithm] 프로그래머스 Lv.2_ 소수 찾기  (2) 2025.07.31
[Java Algorithm] 프로그래머스 Lv.1 _ 모의고사  (2) 2025.07.31
[Java Algorithm] 프로그래머스 Lv.1 _ 최소직사각형  (2) 2025.07.30
[Java Algorithm] 프로그래머스 Lv.2 _ H-Index  (2) 2025.07.30
'Algorithm Study' 카테고리의 다른 글
  • [Java Algorithm] 프로그래머스 Lv.2_ 피로도
  • [Java Algorithm] 프로그래머스 Lv.2_ 소수 찾기
  • [Java Algorithm] 프로그래머스 Lv.1 _ 모의고사
  • [Java Algorithm] 프로그래머스 Lv.1 _ 최소직사각형
microsaurs
microsaurs
개발 스터디로그입니다. 공부한 내용을 정리해서 올립니다 ㅇ-ㅇ
  • microsaurs
    microsaurs.devlog
    microsaurs
  • 전체
    오늘
    어제
    • 분류 전체보기 (153)
      • Side Project (4)
      • Algorithm Study (50)
      • JAVA (8)
      • Swift (11)
      • Python (21)
      • CS (5)
      • React (3)
      • 리얼클래스 studylog (27)
      • 정보처리기사[실기] (23)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    javaalgorithm
    리얼학습일기
    study
    ios프로그래밍
    정보처리기사실기
    SWIFT
    프로그래밍언어
    타일러영어
    파이썬기초
    정처기실기
    javaStudy
    나도코딩
    리얼클래스
    프로그래머스
    Python
    알고리즘
    영어독학
    파이썬문법
    더오피스
    스위프트기초
    The Office
    정보처리기사
    영어회화
    Java
    자바알고리즘
    ios프로그래밍을위한스위프트기초
    Algorithm
    정보처리기사프로그래밍언어
    ios개발
    파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
microsaurs
[Java Algorithm] 프로그래머스 Lv.2_ 카펫
상단으로

티스토리툴바