기본 틀 :
using System;
public class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[] {};
return answer;
}
}
약수를 이용하면 쉽게 풀 수 있겠다는 생각을 했지만
정작 가로와 세로 길이를 구하는 부분에서 막혀 문제를 풀지 못 했다...
4, 6, 7 테스트를 케이스로는
brown = 18, yellow = 6
[18, 6] -> [8, 3] (o)
[18, 6] -> [6, 4] (x)
의 경우가 존재했다...
어떻게든 해결 방법을 모색했지만 해결 방법이 떠오르지 않아
옛날에 JavaScript로 모든 테스트를 통과한 코드를 바탕으로 C# 코드를 작성했다.
(오늘도 과거에 나에게 졌다...)
using System;
using System.Collections.Generic;
public class Solution {
public int[] solution(int brown, int yellow)
{
int sum = brown + yellow;
List<int> div = new List<int>();
List<int> mod = new List<int>();
for(int i = 2; i <= (int)Math.Sqrt(sum);i++)
{
if(sum % i == 0)
{
div.Add(sum / i);
mod.Add(i);
}
}
int index;
for(index = 0; index < div.Count; index++)
{
if((div[index] - 2) * (mod[index] - 2) == yellow ) break;
}
return new int[] { div[index], mod[index] };
}
}
코드에서는 몫과 나누는 숫자를 각각 따로 리스트로 저장하고 있었다.
그리고 반복문으로 두 리스트를 조회하면서
(div[index] - 2) * (mod[index] - 2) == yellow
인 경우를 찾고자 했다.
왜냐하면, yellow의 개수는 brown이 둘러 쌓고 있는 영약을 뺀 개수가 되기 때문에
div(가로)와 mod(세로) 각각 2를 빼 yellow의 개수가 같은 경우를 찾고자 했기 때문이다.
'문제 풀기 > C#' 카테고리의 다른 글
81. N개의 최소공배수 (0) | 2025.02.28 |
---|---|
80. 예상 대진 (0) | 2025.02.28 |
78. 피보나치 (0) | 2025.02.25 |
77. 이진 변환 반복하기 (Convert.int32, Convert.ToString) (0) | 2025.02.25 |
76. JadenCase 문자열 만들기 (0) | 2025.02.25 |