728x90
반응형
문제 설명
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 빨간색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 빨간색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 빨간색 격자의 수 red가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한사항
- 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
- 빨간색 격자의 수 red는 1 이상 2,000,000 이하인 자연수입니다.
- 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
입출력 예
using System;
using System.Collections.Generic;
public class carpet
{
public static int[] solution(int brown, int red)
{
int[] answer = new int[] { };
for (int i=red; i>=1; i--)
{
if(red%i==0)
{
if((i+2)*2+(red/i*2) == brown) {
answer = new int[] { i + 2, 2+red/i };
return answer;
}
}
}
return answer;
}
public static void Main()
{
// 테스트
int[] a = solution(16, 9);
Console.WriteLine(a[0] +", "+ a[1]);
}
}
red와 brown의 관계가
red가 한 줄일 때 위아래 : (red+2)*2 | 사이드 : 1*2 위아래와 사이드를 합친 것 : brown
red가 두 줄일 때 위아래 : (red/2+2)*2 | 사이드 : 2*2 위아래와 사이드를 합친 것 : brown
red가 세 줄일 때 위아래 : (red/3+2)*2 | 사이드 : 3*2 위아래와 사이드를 합친 것 : brown
... 과 같은 규칙이 있음을 알 수 있다.
위 수식을 계산했을 때 brown과 일치하는 것을 찾았고
일치할 때 가로 : red가로+2 | 세로 : red세로+2 만 하면 된다.
728x90
반응형
'프로그래밍 > 문제풀이' 카테고리의 다른 글
[C#] 단어 퍼즐 (0) | 2020.05.08 |
---|---|
[파이썬] 프로그래머스 카펫 (0) | 2020.04.30 |
[C#] 올바른 괄호 (0) | 2020.04.28 |