본문 바로가기

공부해 codingTest

프로그래머스 JAVA Level 2. 카펫

Level 2. 카펫

https://school.programmers.co.kr/learn/courses/30/lessons/42842

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 통과

 

2. 통과 코드

 

3. 문제 해석

가로의 길이가 세로의 길이보다 크거나 같다. (직사각형 또는 정사각형)

가장 바깥쪽만 갈색이다. (첫번째 사진의 4 X 3인 직사각형을 보면 가장 바깥쪽만 갈색이다.)

나머지는 노란색이다.

갈색의 수와 노란색의 수가 주어진다.

 

그러므로 주어진 갈색의 수와 노란색의 수를 역산하여 가로, 세로 길이를 구한다.

 

4. 풀이

(1) 갈색의 수 = brown, 노란색의 수 = yellow

(2) 가로의 길이 = i, 세로의 길이 = j

(3) brown = 2 * (i + j) -4

     yellow = (i - 2) * (j - 2)

     두 가지 식을 도출 할 수 있다.

     왜냐하면 가로의 길이가 세로의 길이보다 크거나 같은 직사각형 또는 정사각형 이고,

     가장 바깥쪽만 갈색이기 때문이다.

 

     좀 더 풀어서 설명하면 갈색의 수 = (가로길이 * 2) + (세로길이 - 2) * 2 이다.

     노란색의 수 = (가로길이 - 2) * (세로길이 - 2) 이다.

(4) 두 개의 식을 모두 만족하는 i와 j를 2중 for문으로 찾는다.

(5) 만족하는 i와 j를 찾으면 cnt를 증가시켜 2중 for문을 종료한다.

(6) 가로길이가 세로길이보다 크거나 같아야 하니 Math라이브러리를 사용한다.

(7) 가로길이와 세로길이를 배열에 담아 반환한다.