본문 바로가기

카테고리 없음

와이프 알고리즘 가르치기 - 입력한 숫자만큼 '수박' 출력하기

728x90

개요

프로그래밍을 입문한지 3개월 정도 된 수박수박 문제를 풀고 있는 아내에게 이 글을 바칩니다.

개발자 분들은 읽지 않으시는 것을 추천드립니다. 화가 나실 수 있습니다. 운전 가르쳐 보셨죠?

문제

1을 입력하면 수

2를 입력하면 수박

3을 입력하면 수박수

...

10을 입력하면 수박수박수박수박수박

위와 같이 출력 되는 solution(n) 함수를 작성 하세요

해설

홀수와 짝수 0 또는 1 True와 False 등 2가지 경우의 수를 처리하는 방법을 떠올릴 수 있는지에 대해 묻는 문제 입니다.

풀이

def solution(n):
  if n == 1:
    print('수')
  elif n == 2:
    print('수박')

solution(1)  # 수
solution(2)  # 수박

결과

수박


먼저 if문을 이용해 단순하게 풀 수 있는지 생각 해봅니다. 1일때 '수' 2일때 '수박'이 나오게는 할 수 있지만 3일때 '수박수' 4일때 '수박수박'이 나오게 할 수는 없습니다.

그렇다면 다른 방법을 떠올려 보아야 합니다.

여기서 생각 해볼 것은 이 어플리케이션이 얼마나 변화무쌍한지 입니다. 이 어플리케이션이 다루는 문자열은 '수'와 '박' 두개입니다. 그러면 True와 False 이렇게 두가지로만 나누어 지면 됩니다.

3일때는 수박수 4일때는 수박수박 이어야 합니다.

아내의 질문

"홀수면 '수'고 짝수면 '박'이라는 것은 알겠다. 하지만 이것을 쌓아야 하는데 쌓는 법을 모르겠다. 이것에 대한 식을 세우는 것이 어렵다"

는 피드백이 있었습니다.

그러면 먼저 쌓는 법을 알아보겠습니다.

result에 쌓기

def solution(n):
    result = ''   # result 변수 선언하기
    print('쌓기 전 result:', result)   # 이 줄은 중간 결과를 확인 하기 위해 넣은 줄입니다.
    result += '수' # += 연산자를 이용해 글자 쌓기
    print('쌓은 후 result:', result)   # 이 줄은 삭제 할 것입니다.

solution(1)  # 수

결과

쌓기 전 result:
쌓은 후 result: 수


result라는 변수에 '수'라는 글자를 추가한 후 출력하는 로직입니다. n으로 받은 숫자 1은 사용되지 않았습니다만 일단 result라는 변수에 '수'라는 글자를 쌓을 수 있었습니다.

한 사이클 더 해보겠습니다.

'박'이라는 글자도 추가로 쌓아보겠습니다.

'박'도 쌓기

def solution(n):
    result = ''
    print('쌓기 전 result:', result)
    result += '수'
    print('쌓은 후 result:', result)
    result += '박'
    print('쌓은 후 result:', result)

solution(1)  # 수

결과

쌓기 전 result:
쌓은 후 result: 수
쌓은 후 result: 수박

'result += 이 계속 반복 될 뿐이지 하드코딩이 아니냐?' 는 피드백이 있었습니다.


아내 : '그러면 밑에 result += '수' 를 넣으면 '수박수'가 되겠네?'
아내 : 'result =+ 수 result =+ 박'을 반복적으로 더해야 되는데? for 반복문을 써야 하는 것인가?'

그래서 for문을 넣어보았습니다.

for문 넣기

def solution(n):
    for i in range(10):
        result = ''
        print('쌓기 전 result:', result)
        result += '수'
        print('쌓은 후 result:', result)
        result += '박'
        print('쌓은 후 result:', result)

solution(1)  # 수

결과

쌓기 전 result:
쌓은 후 result: 수
쌓은 후 result: 수박
쌓기 전 result:
쌓은 후 result: 수
쌓은 후 result: 수박
쌓기 전 result:
쌓은 후 result: 수
...
쌓기 전 result:
쌓은 후 result: 수
쌓은 후 result: 수박
쌓기 전 result:
쌓은 후 result: 수
쌓은 후 result: 수박


쌓기 전 result:
쌓은 후 result: 수
쌓은 후 result: 수박

 

이 메세지가 계속 반복될 뿐입니다. 무언가 잘못 짠 것 같군요. 어떻게 해야 할까요?

아내 : '저거를 반복할게 아니고 수박수박수가 나오게 해야 되는거 아냐?'

 

나 : 부인 그러면 '저거를 반복할게 아니고'에서 '저거'가 뭐야?

나 : '저거'라고 대명사로 하면 머릿속이 정리가 안되기 때문에 좀 더 구체적으로 질문을 해야 머릿속이 정리가 돼

아내 : 저 전체 로직을 반복하는게 아니고 '수', '박'이 추가되는 부분만 반복 되어야 한다는거야.

 

나 : 그러면 앞에 질문에서 '저거'는 전체 로직이 반복되고 있다는 것이네?

아내 : 응 마져

 

나 : 코드에도 전체 로직이 반복되는 것으로 되어 있어?

아내 : 응 그런 것 같은데.

 

나 : 아니 같은데가 아니고 맞다 아니라고 해죠

아내 : 응

 

나 : 그러면 전체가 반복 되지 않고 부분만 반복되어야 하는거네?

아내 : (표정이 안좋아 지며) 어.

 

나: 그러면 어떤 부분을 반복시키지 말아야 하고 어떤 부분을 반복시켜야 하는데?

아내 : (짜증 + 울먹한 목소리로) 모올라아!

 

아내 : 꼬치꼬치 묻지만 말고 생각을 트여줬으면 좋겠어.

나 : 내가 어떻게 잘못 물어보고 있는데?

 

아내 : 취조 하는 것 같아서 생각하기가 싫어졌어.

여기까지 진행 하였습니다.

 

end.

 

728x90
블로그 주인장입니다. 원하시는 정보는 얻으셨나요? 이 포스트에서 추가로 필요한 정보가 있으시면 여기에 남겨주세요.