기몽수
코딩 기록일지
기몽수
전체 방문자
오늘
어제
  • 분류 전체보기 (443)
    • 알고리즘 - SWEA (210)
      • D1 (19)
      • D2 (25)
      • D3 (143)
      • D4 (21)
      • D5 (2)
    • 알고리즘 - Programmers (74)
      • Unrated (34)
      • Lv 0 (4)
      • Lv 1 (3)
      • Lv 2 (32)
      • Lv 3 (1)
    • 알고리즘 - Baekjoon (158)
      • Bronze (1)
      • Silver (65)
      • Gold (90)
      • Platinum (2)
    • 취업 (0)
    • SSAFY (1)
hELLO · Designed By 김용수.
기몽수

코딩 기록일지

알고리즘 - Programmers/Lv 2

[level 2] 카펫 - 42842

2023. 9. 10. 18:29

[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/42842) ### 성능 요약 메모리: 77.4 MB, 시간: 0.04 ms ### 구분 코딩테스트 연습 > 완전탐색 ### 채점결과 Empty ### 문제 설명

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.

carpet.png

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.

Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항
  • 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
  • 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
  • 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
입출력 예
brown yellow return
10 2 [4, 3]
8 1 [3, 3]
24 24 [8, 6]

출처

※ 공지 - 2020년 2월 3일 테스트케이스가 추가되었습니다.
※ 공지 - 2020년 5월 11일 웹접근성을 고려하여 빨간색을 노란색으로 수정하였습니다.

> 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges 

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

school.programmers.co.kr

 

import java.util.*;

class Solution {
    public int[] solution(int brown, int yellow) {
        
        // brown(10) - 4 -> 6
        // yellow - 2
        // 6 / 2 -> 3의 약수 확인(1,3)
        // 2 - (1,2) -> 합이 3이 됨 그러면 4,3이 됨

        // brown(8) - 4 -> 4
        // yellow - 1
        // 4 / 2 -> 2의 약수 확인(1,2)
        // yellow - 1 -> 2씩 더해줌 (3,3);
        
        // brown(24) - 4 -> 20
        // yellow - 24
        // 20 / 2 -> 10의 약수 확인(1,2,5,10)
        // 24 - (1, 24), (2,12), (3,8), (4,6) v - 2씩 더해줌
        int brownCore = brown - 4;
        brownCore /= 2;
        ArrayList<Integer> list = new ArrayList<>();
        for(int i = 1; i <= Math.sqrt(brownCore); i++){
            if(brownCore % i== 0){
                list.add(i);
                list.add(brownCore/i);
            }
        }

        int x = 0;
        int y = 0;
        for(int i = 1 ; i <= Math.sqrt(yellow); i++){
            if(yellow % i == 0){
                x = i;
                y = yellow / i;
                if(list.contains(x+y)){
                    break;
                }
            }
        }
        x += 2;
        y += 2;
        return new int[]{Math.max(x,y),Math.min(x,y)};
    }
}

'알고리즘 - Programmers > Lv 2' 카테고리의 다른 글

[level 2] 구명보트 - 42885  (0) 2023.09.10
[level 2] 영어 끝말잇기 - 12981  (0) 2023.09.10
[level 2] 짝지어 제거하기 - 12973  (0) 2023.09.10
[level 2] 피보나치 수 - 12945  (0) 2023.09.10
[level 2] 다음 큰 숫자 - 12911  (0) 2023.09.10
    '알고리즘 - Programmers/Lv 2' 카테고리의 다른 글
    • [level 2] 구명보트 - 42885
    • [level 2] 영어 끝말잇기 - 12981
    • [level 2] 짝지어 제거하기 - 12973
    • [level 2] 피보나치 수 - 12945
    기몽수
    기몽수

    티스토리툴바