-
C# 프로그래머스 Lv2 카펫코딩테스트 2020. 8. 19. 16:12
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
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]
풀이
전체 칸 수 10+2 =12
x가로크기 y세로크기
x * y == 전체 칸수 가 되는 경우를 찾는다. 단 가로크기가 더 크거나 같다고 했으니 (x>y||x==y)
12 1
6 2
4 3 이 가능 할 것이고
이 중에서
위 사각형들 중에서 안에 노란색의 개수가 입력에서의 노란색의 개수와 일치하는지를 판단한다.
x*2 아래 위 가로크기
y*2 왼쪽 오른쪽 세로크기
-4 위 빨간부분 빼면
갈색 블록의 개수가 나온다. 이것을 전체 칸수에서 빼면 노란색 블록의 개수가 나온다.
if((width-((x*2)+(y*2)-4))==yellow)
이 조건문에 일치한다면 리턴배열 [0]은 x 그리고 [1]은 y로 입력하고 리턴한다.
public class Solution { public int[] solution(int brown, int yellow) { int[] answer = new int[2] { 0, 0}; int x, y; int width = brown + yellow; for(int i=1; i<=width;i++) { x = i; y = width / x; if (x > y || x==y) { if((width-((x*2)+(y*2)-4))==yellow) { answer[0] = x; answer[1] = y; break; } } } return answer; } }
'코딩테스트' 카테고리의 다른 글
C# 프로그래머스 Lv2 최솟값 만들기 (0) 2020.08.19 C# 프로그래머스 Lv2 행렬의 곱셈 (0) 2020.08.19 C# 프로그래머스 Lv2 JadenCase 문자열 만들기 (0) 2020.08.19 C# 프로그래머스 Lv2 가장 큰 수 (0) 2020.08.19 C# 프로그래머스 Lv2 스킬트리 (0) 2020.08.19