인프런 커뮤니티 질문&답변

석국수님의 프로필 이미지
석국수

작성한 질문수

세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)

재귀함수 이해하기 [문제풀이] : BOJ 4779

좋은 풀이란 무엇일까요?

해결된 질문

작성

·

109

0

안녕하세요, 문제를 푸는 도중에 갑자기 궁금증이 생겨 질문 드립니다.

4779 재귀문제를 푸는데, 예제 출력을 분석하지 않은? 상태에서 문제만 가지고 직관적으로 문제를 해결하려 했습니다.

먼저 선을 만들고, 선을 3으로 나누면서 몫이 0이 되면 선을 리턴하고, 그렇지 않으면 계속 나누는 방법을 생각했습니다.

def cantor(n):
    line = '-' * (3 ** n)
    def divide(part):
        if len(part) == 1:
            return part
        N = len(part) // 3
        return divide(part[:N]) + ' ' * N + divide(part[-N:])
    
    return divide(line)

n = int(input())

result = cantor(n)
print(result)

강의에서는 예제 출력을 보고 케이스마다 공백이 있는 것을 확인하여 공백에 3^(k-1)을 넣어줘서 푸셨는데, func() + 공백 + func() 형식으로 recursive case를 푸는 방법은 전혀 생각이 안났습니다.

경험이 많이 없어서 강의대로 푸는 방법이나 스킬을 익혀야 하는지, 아니면 직관적으로 푸는게 좋은지 궁금합니다.

직관적으로 푸는게 나쁜건 아닌데 강의대로 푸는게 더 구현이 편한 것 같기도 해서 질문드려요.

좋은 강의 감사드립니다 🙂

답변 2

0

알리 Ally님의 프로필 이미지
알리 Ally
지식공유자

안녕하세요. 선채소님!

이제 막 코딩테스트 공부를 시작하시고, 문제를 풀이하는 데 있어서 고민이 많으신 것 같습니다.

 

알고리즘 문제를 풀 때는 수학적이고 논리적으로 풀이를 떠올리는 능력도 중요하며, 직관적으로 풀이를 떠올리는 능력도 중요합니다.

문제에 따라서, 수학적이고 논리적인 접근으로 푸는 것이 더 쉬울 때도 있으며, 직관적인 접근으로 푸는 것이 더 쉬울 때도 있습니다.

 

따라서, 문제를 풀며 '어떠한 풀이가 더 좋다'라는 생각보단, 여러 풀이가 존재하는 문제라면 '나는 이렇게 풀었는데, 이런 식으로도 풀 수 있구나'하며 수학적이고 논리적인 접근직관적인 접근 둘 다 공부하시는 게 실력을 늘리는 데 많이 도움이 될 거라고 생각이 됩니다!

 

(만약, 풀이의 논리는 비슷하고 구현하는 부분만 다르다면, 자신한테 편한 구현 방식으로 구현하면 됩니다.)

 

또 궁금하신 점 있으시면 언제든 질문 부탁드립니다.

감사합니다. :)

0

안녕하세요, 인프런 AI 인턴입니다.

질문 주신 내용에 대해 답변 드리겠습니다. 좋은 풀이란 여러 가지 관점에서 바라볼 수 있는데요, 효율성, 가독성, 재사용성 등 다양한 요소를 고려하여 풀이할 수 있습니다.

코딩테스트나 알고리즘 문제를 푸는 경우, 경험과 연습을 통해 다양한 해결 방법을 접하며 직관적으로 문제를 푸는 능력을 기르는 것이 중요합니다. 직관적으로 문제를 해결하는 것도 좋은 접근 방식이 될 수 있으며, 강의에서 소개된 방법이나 다른 사람들의 풀이를 보며 다양한 접근 방식을 배우는 것도 매우 중요합니다.

어떤 방식이 더 나은지는 문제의 상황과 자신의 스타일에 따라 달라질 수 있습니다. 예를 들어, 강의에서 소개된 방법이 구현하기 더 편리하고 이해하기 쉬울 수 있으나, 직관적으로 문제를 푸는 방식이 더 창의적인 해결책을 낼 수도 있습니다.

따라서, 강의 내용을 충분히 이해하고 연습하면서도, 자신만의 독특한 접근 방식을 개발하는 것이 중요합니다. 또한, 다양한 문제를 통해 경험을 쌓아가며 어떤 상황에서 어떤 방식의 풀이가 더 적합한지 판단하는 능력을 기르는 것이 좋겠습니다.

결국, 좋은 풀이란 문제를 정확하고 효율적으로 해결할 수 있는 방법이며, 문제 해결 과정에서 자신의 생각과 논리를 명확하게 표현할 수 있는 방식일 것입니다. 강의를 통해 배우는 것도 중요하지만, 여러분만의 방식으로 문제를 접근하는 것도 매우 중요합니다. 계속해서 다양한 문제를 풀어보며 경험을 쌓아가세요.

좋은 강의에 대한 칭찬도 감사드립니다. 문제 해결 과정에서 더 궁금한 점이 있다면 언제든지 질문해 주세요.

석국수님의 프로필 이미지
석국수

작성한 질문수

질문하기