내코드
def solution(A, B):
if A == B:
return 0
count = 0
for _ in range(len(A)):
A = A[-1] + A[:-1]
count += 1
if A == B:
return count
return -1
코드설명
- 먼저 A와 B가 동일하면 0을 반환합니다. (이미 같은 문자열이므로 회전이 필요 없기 때문)
- for 루프를 사용해 최대 len(A)번까지 A를 오른쪽으로 회전합니다.
- 회전은 A[-1] + A[:-1]를 사용해 문자열의 마지막 문자를 맨 앞으로 이동시켜 구현합니다.
- 회전이 진행될 때마다 count를 증가시킵니다.
- 매번 회전된 A와 B를 비교하며 같으면 count를 반환합니다.
- 모든 회전을 시도한 뒤에도 B와 같아지지 않으면 -1을 반환합니다.
특징
- 직관적이고 구현이 간단합니다.
- 매번 A를 갱신하며 회전하므로 가독성이 좋습니다.
- 하지만 문자열 회전마다 새로운 문자열을 생성하기 때문에 메모리와 속도 면에서 비효율적일 수 있습니다.
다른 코드
def solution(A, B):
return (B in (A + A)) * (len(B) - (A + A).find(B)) or -1
코드설명
- 먼저 A + A를 생성합니다. 이는 A를 두 번 이어붙인 문자열로, A를 한 번 회전한 모든 결과가 포함됩니다.
- 예: A = "hello"라면, A + A = "hellohello".
- B가 A + A에 포함되어 있다면, B는 A를 회전해서 만들 수 있는 문자열입니다.
- (A + A).find(B)를 사용해 B가 처음 등장하는 인덱스를 찾습니다.
- 이 인덱스는 A를 몇 번 회전해야 B가 되는지를 의미합니다.
- B가 포함되지 않으면 find는 -1을 반환하고, 논리 연산에 따라 최종적으로 -1이 반환됩니다.
특징
- 문자열 회전의 모든 경우를 한 번에 처리합니다.
- 메모리를 추가로 사용하지만, 반복문을 사용하지 않아 더 효율적입니다.
- 코드가 짧고 한 줄로 구현되어 매우 깔끔합니다.
두 코드 비교
- 가독성:
- 내 코드는 회전 과정을 하나하나 확인하며 진행하므로 직관적이고 이해하기 쉽습니다.
- 다른 코드는 수학적이고 압축적인 표현을 사용하여 한 줄로 구현되었습니다. 다소 난해할 수 있지만, 익숙해지면 간결합니다.
- 효율성:
- 내 코드는 문자열을 계속 생성하며 회전하므로 시간과 메모리 면에서 상대적으로 비효율적입니다.
- 다른 코드는 A + A를 한 번 생성한 뒤, 포함 여부와 인덱스를 계산하는 방식으로 반복문 없이 처리하므로 더 효율적입니다.
- 구현 난이도:
- 내 코드는 기본적인 반복문과 문자열 슬라이싱만 사용하므로 초급 개발자도 쉽게 작성할 수 있습니다.
- 다른 코드는 문자열 포함 여부와 인덱스 계산을 활용해 약간의 응용력이 필요합니다.
결론
내 코드는 직관적이고 이해하기 쉬워 초보자에게 적합한 방식입니다. 그러나 문자열 회전을 여러 번 수행하므로 효율성에서 다소 손해를 봅니다.
다른 코드는 회전의 모든 경우를 한 번에 처리하며, 간결하고 효율적이지만 구현 방식이 조금 더 복잡할 수 있습니다.
'프로그래머스' 카테고리의 다른 글
프로그래머스 | Python | 다음에 올 숫자 (0) | 2025.01.17 |
---|---|
프로그래머스 | Python | 특이한 정렬 (1) | 2025.01.16 |
프로그래머스 | Python | 유한소수 판별하기 (0) | 2025.01.13 |
프로그래머스 | Python | 등수 매기기 (0) | 2025.01.10 |
프로그래머스 | Python | 치킨 쿠폰 (1) | 2025.01.08 |