회고
[수습일지] - 77(주말)
Happy Programmer
2023. 6. 11. 23:52
(1).백준 2447번 별 찍기 - 10은 3의 n승의 사이즈로 된 정사각 형태의 별찍기 문제로
재귀를 통해서 문제를 해결할 수 있는 형태였다.
처음에는 별을 먼저 다 찍어두고 공백 부분으로 바꾸는 방식으로 진행하려고 했으나
공백 부분만 전체 지우고 내려가기에는 내용이 이상해졌고
최종적으로 해당되는 부분에 별만 찍는 것이 재귀적으로 처리가 맞는 것 같아서
다시 공백을 찍고 분할정복을 통해 문제를 해결했다.
기본적으로 3x3 형태로 한 변의 길이가 3의 n승으로 늘어나기 때문에
3, 9, 27, 81 등 3의 배수 형태로 각 내부의 9개가 동일한 패턴을 가지고 있었고
9개 중 중앙 부분을 전체 공백 처리를 해야 했기 때문에
위에서 언급했던 것 처럼 전체 부분을 공백으로 둔 다음
별을 채워야 하는 부분을 다시 재귀처리로 공백처리할 부분만 재귀처리를 하지 않는 방식을 선택했다.
아래의 b가 공백이라고 했을 때 index는 1,1이기 때문에
aaa
aba
aaa
각 변의 길이 추가를 담당하는 l을 추가할 때
i*j가 1인 경우 중앙이라고 판단하고 재귀를 돌리지 않았고
최종적으로 변의 길이가 1이 되었다면 해당 부분은 '*'을 넣어야 하는 부분이 되었다고 인식하고
해당 부분을 '*'로 대체하는 방식으로 문제를 해결했다.
const input = 27
const result = []
for(let i = 0 ; i < input ; i++){
result.push(new Array(input).fill(' '))
}
const recursion = (x, y, length) => {
if(length === 1){
result[x][y] = '*'
return
}
const l = length/3
for(let i = 0 ; i < 3 ; i++){
for(let j = 0 ; j < 3 ; j++){
if(i*j !== 1){
recursion(x + i*l, y + j*l, l)
}
}
}
}
recursion(0,0,input)
console.log(result.map(el => el.join('')).join('\n'))