본문 바로가기

프로그래밍/기타

프로그래머스 - 카펫 (C#)

728x90
반응형
using System;
using System.Numerics;

public class Solution
{
    public int[] solution(int brown, int yellow) 
    {
        int[] answer = new int[] { 3, 3 };
        int y;
        int width = brown + yellow;
        for (int x = 1; x <= width; x++)
        {
            y = width / x;
            if(x < y)
                continue;
            
            if ((width - ((x * 2) + (y * 2) - 4)) == yellow)
            {
                answer[0] = x;
                answer[1] = y;
                return answer;
            }
        }

        return answer;
    }
}

다른분의 코드를 참고했다.

 

이 코드를 납득하기까지 생각보다 엉뚱한 부분에서 오래걸렸다.

 

테스트케이스를 만들었는데 yellow가 7일 경우

 

1번) - Brown 17개

000000 
011110 
011100 
000000

 

2번) - Brown 18개

00000 
01110 
01110 
01000 
00000

 

위 두가지 중 하나라고 생각했다. 그러나 이 경우에는..

 

000000000
011111110
000000000

 

이게 맞더라..

 

프로그래머스 문제의 문제점이 이런 부분에 대한 코멘트가 없다는것이다.

(정확히는 문제 설명이 모호한 경우가 많다는거..)

 

문제를 읽는 사람에 따라서

1. "테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫"

-> 테두리가 무조건 1줄인 것으로 생각할 수 있음

2. 다양한 테스트케이스가 없다.

-> Yellow의 값이 3이상의 홀수 값일 때의 테스트케이스가 없음

-> 홀수일 때 카펫의 모양은 이해하기에 따라 다르게 해석이 될 수 있음

따라서 명확하게 "이런 경우에는 이런씩으로 된다."고 알려주어야함

 

문제 설명에 대해 아쉬움이 많았지만

여러가지 케이스에 대해 조금 더 생각해보지 못했던 나의 미숙함을 다시 한 번 생각하게 되었다.

 

다람쥐와 포동포동이

 

 

 

 

 

RememberCook 9월 28일 정식 출시!

두번째 게임인 RememberCook이 출시되었습니다. 귀여운 캐릭터들이 나오는 간단한 게임이며 플레이어의 공간인지능력을 테스트하는 게임입니다. 아래 링크를 통해 다운 받으실 수 있으니 많은 관

chipmunk-plump-plump.tistory.com

반응형