백준2447 별찍기 - 10 using python ( 미완 )

horiz.d·2021년 10월 25일
0

열어보며

단계별 풀어보기를 진행중이지만, 단계별로 올라가는 것은 그대로 진행하되 10단계의 '재귀'부터 따로 하나씩 손대보기로 생각했다. 알고리즘에 최소한이라도 근접한 문제로 뇌를 자극해놓고 싶다.

논리적 구조화

이번 문제도 먼저 논리적 구조를 만들어놓고 진행해보려고 노력중이다. 그리고 문제를 핵심 3단계로 분해해서 고민했다.

  • STEP 1 )
    (1) input을 받고 이 input이 3의 몇 거듭제곱인지 판별해서 그 수를 k에 저장한다
    (2) 가운데가 비어있는 3X3으로 찍힌 별의 구조를 최소단위로 구현해놓는다.

  • STEP 2 ) 1LV에서 만들어진 최소단위 별구조를 요소로 이용해 다시 가운데가 빈 3X3 구조를 만들어낸다.
    ( LV1->LV2에서와 같이 앞으로 각 레벨의 산출물은 다음 레벨에서의 최소단위로 재활용된다. )

  • STEP 3 ) 앞의 과정을 반복하다가 Depth Level이 K에 도달하면 종료하도록 만든다.

이때 STEP 1->2에서 언급된 과정의 반복을 재귀함수로 구현하는 것이 효율적인데,
if 각 재귀 LV에서 거듭제곱수 K값에 도달하지 않았다면

  • 방법1 )
    해당 재귀의 산출물을 다음 LV재귀의 인자로 넘겨주어 다음레벨에서 그대로 실행한다.
  • 방법2 )
    직전 레벨의 함수를 가운데가 3*3이 빈 구조적 모습 따라 n회차로 실행시켜준다.



코드구현 by python

  • STEP 1 - (1) : 거듭제곱수 k 판별 및 저장
#입력
inputV = int(input())
k = 0
i = 0
##LV1-(1) 3의 거듭제곱수 판별및저장
while i < 7 :
  compV = i+1

  if 3**compV == inputV :
    k = compV
    break
  i += 1

이 코드의 결과로 입력으로 받은값의 3의 거듭제곱수가 k에 저장된다.



  • STEP 1 - (2) : LV1 최소단위 3X3별찍기 함수 구현
LV1의 별구조 구현
def printstar() :
  i = 0
  while i < 3 :
    j = 0
    print('')
    while j < 3 :
      if j == 1 & i == 1:
        print(' ',end='')
        j += 1
        continue
      else :
        print('*',end='')
        j += 1
    i += 1

아직 문제를 풀지 못했고
위의 내용은 모두 수정될 예정이다.

profile
가용한 시간은 한정적이고, 배울건 넘쳐난다.

0개의 댓글