내가 이해한 바로는 일단
면적을 최소화? 해야한다고 이해했다. 그런데 이렇게 해버리면 (18,6)이 주어졌을 때 아래와 같이 출력되지 않는다.
BBBBBBBB
BRRRRRRB
BBBBBBBB
왜냐하면 RRR
RRR 이렇게 배치가 되기 때문에 뭐 이렇게 붕 뜨게 된다. 또 문제를 제대로 이해하지 않고 내 맘대로 문제를 풀어 버렸다.
BBBBBB
B RRR B
B RRR B
B B
BBBBBB
아래의 코드를 버리고 그럼 새 코드를 짜봐야겠다. 완전 알고리즘이 달라질듯 하다.
fun solution(brown: Int, yellow: Int): IntArray { // yellow -> 가로 x 세로 , brown -> 가로 *2 + (세로 -2)*2
var answer = IntArray(2)
var yellow_horizon : Int = 0 // 옐로 가로 몫
var yellow_vertical : Int = 0// 옐로 세로 나머지
var min_difference : Int = 10000 // 만약 yellow 200 이면 for 문 돌면서 20 10 이 아니라 100 2 이렇게 바뀔 수 도 있어서 최소인 경우 찾아야함
var tempt : Int // 갈색에서 임시로 사용하게 될 값
for (i in 1..yellow - 1){ // yellow 1인 경우 예외처리 해야함
if (yellow % i == 0 && i - yellow / i > 0 && i - yellow / i < min_difference){
yellow_horizon = i
yellow_vertical = yellow / i
min_difference = yellow_horizon - yellow_vertical
}
if (i > yellow / 2) break // 나누는 수가 yellow / 2 이상이면 의미 없음 가로가 무조건 더 길어야 하기 때문 3을 2로 나누거나 4를 3, 100을 51로 나눈다고 생각해보면 컷 해야함
// yellow 가로 세로
}
if( yellow == 1 ){
yellow_horizon = 1
yellow_vertical = 1
}
println("노랑 가로 = $yellow_horizon")
println("노랑 세로 = $yellow_vertical")
min_difference = 1000 // 갈색에서도 써야하니까 일단 다시 초기화
for (i in yellow_horizon + 2 .. brown/2){
tempt = (brown - i*2) / 2 + 2// 임시 갈색 세로 길이
// println("일단 tempt 다 출력 $tempt")
if ( i >= tempt && i - tempt < min_difference && i* 2 + tempt *2 - 4 == brown){ // 가로가 세로보다 길고 현재 세로 가로 길이 차가 더 작아지고, 갈색 조건 만족
// println("조건 만족한 임시 갈색 세로 길이 $tempt")
answer[0] = i
answer[1] = tempt
min_difference = answer[0] - answer[1]
} //pass
}
println("나 끝났다")
answer.forEach{print(it)}
return answer
}
수업 끝나고 얼른 다시 짠 다음 수정해야지.
풀었다~
class Solution {
fun solution(brown: Int, yellow: Int): IntArray { // yellow -> 가로 x 세로 , brown -> 가로 *2 + (세로 -2)*2
var answer = IntArray(2)
var yellow_horizon : Int // 옐로 가로 몫
var yellow_vertical : Int // 옐로 세로 나머지
for (i in 1..yellow - 1){ // yellow 1인 경우 예외처리 해야함
if (yellow % i == 0 ){
yellow_horizon = yellow / i // horizon이 더 길어야 하고 6 / 2 = 3 이 6/3 = 2 보다 빨리 나옴
yellow_vertical = i
if((yellow_horizon + 2) * 2 + yellow_vertical * 2 == brown) {
answer[0] = yellow_horizon + 2
answer[1] = yellow_vertical + 2
return answer
}
}
}
if (yellow == 1) { //앞에 for문에 안들어감 따로 예외처리 해주자
answer[0] = 3
answer[1] = 3
return answer
}
return answer // 코틀린은 a 'return' expression required in a function with a block body ('{...}') 오류를 일으킨다.
}
}
[Python] 프린터 (0) | 2021.04.20 |
---|---|
[Kotlin] 기능개발 (0) | 2021.04.19 |
[Kotlin] 키패드 누르기 (0) | 2021.04.18 |
[Python] 실패율 (0) | 2021.04.16 |
[Python] [Kotlin]프로그래머스 - 내적 (0) | 2021.04.14 |
댓글 영역