주녘공부일지

[프로그래머스 C#] Lv.2 카펫 본문

Programmers - C#/CodingTest Lv.2

[프로그래머스 C#] Lv.2 카펫

주녘 2023. 12. 2. 20:50
728x90

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

 

프로그래머스

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

programmers.co.kr

1. 정답코드 및 핵심 아이디어, 유의사항

구해야 하는 가로 값 x, 세로 값 y로 놓고 수식을 세워서 풀면 되는 문제

매개변수로 주어지는 테두리 영역 brown과 테두리영역을 제외한 영역 yellow에 따른 수식은 아래와 같음

 

1) 각각 가로 * 2 값과 세로 * 2 값에 겹치는 영역인 꼭짓점의 개수 4를 빼줌

- brown = 2x + 2y - 4

  brown = 2(x + y - 2)

  brown / 2 = x + y - 2

  brown / 2 + 2 = x + y (조건1. 더한 값)

 

2) 테두리 안의 영역은 결국 직사각형 형태일테니 테두리 부분을 제외한 영역의 부피를 구함

- yellow = (x - 2) * (y - 2)

  yellow  = xy - 2x - 2y + 4

  yellow  = xy - (2x + 2y - 4)

  yellow  = xy - brown

  yellow + brown = xy (조건2. 곱한 값)

 

위에서 구한 두가지 조건식을 만족하는 x, y 값을 찾으면 됨 (단, x >= y )

+ brown은 8이상, yellow는 1이상이므로 x, y >= 3

    using System;

    public class Solution
    {
        public int[] solution(int brown, int yellow)
        {
            int addValue = (brown / 2) + 2; // 가로 + 세로
            int xy = brown + yellow; // 가로 * 세로

            int y = 0, x = 0;

            // y값은 x값보다 클 수 없음 (y 최소값 3)
            for (y = 3; y <= addValue / 2; y++)
            {
                // 조건에 따른 x, y값 세팅 (더한 값)
                x = addValue - y;

                // 조건을 만족하는지 체크 (곱한 값)
                if (xy == x * y)
                    break;
            }

            return new int[2] { x, y };
        }
    }
728x90