코딩스터디
[프로그래머스] 암호해독 파이썬
열쩡왔쩡
2024. 9. 3. 17:09
# 문제 설명
군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.
- 암호화된 문자열 cipher를 주고받습니다.
- 그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.
문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.
# 제한사항
- 1 ≤ cipher의 길이 ≤ 1,000
- 1 ≤ code ≤ cipher의 길이
- cipher는 소문자와 공백으로만 구성되어 있습니다.
- 공백도 하나의 문자로 취급합니다.
처음에는 code의 N번째를 인덱싱하여 리스트에 모아담아 더하는 것으로 생각해서 for 문으로 접근했다가,
좀더 간단하게 해결할 수 있다는 것을 알았다.
#정답
def solution(cipher, code):
answer = ''
for i in range(code - 1, len(cipher), code):
answer += cipher[i]
return answer
# 예시
cipher = "abcdefghijklm"
code = 3
result = solution(cipher, code)
print(result) # 결과: "cfil"
#설명
- for 루프:
for i in range(code - 1, len(cipher), code)- code - 1부터 시작하여 문자열 cipher의 길이(len(cipher))까지 code만큼의 간격으로 반복
- 예를 들어, code가 3이면 range(2, len(cipher), 3)이 됩니다. 이는 2, 5, 8, 11과 같은 인덱스를 순차적으로 생성
- answer += cipher[i]:
- cipher의 해당 인덱스 i에 위치한 글자를 answer 문자열에 추가
# range 함수 복습
range 함수의 기본 구조
range(start, stop, step)은 세 개의 인자를 받습니다.
- start: 반복이 시작되는 값입니다. 인덱스는 여기서부터 시작합니다.
- stop: 반복이 멈추는 값입니다. 이 값 직전까지 반복됩니다.
- step: 반복할 때마다 증가하는 값입니다. 이 값을 통해 반복 간격을 설정할 수 있습니다.
for i in range(code - 1, len(cipher), code):의 의미
이 코드는 cipher 문자열에서 code의 배수 번째 글자를 선택하기 위해 설정된 반복문입니다.
각 인자의 역할
- start: code - 1
- cipher의 인덱스는 0부터 시작하기 때문에, code 번째 글자는 실제로 code - 1 인덱스에 위치하게 됩니다.
- 예를 들어, code가 3이라면, 3번째 글자의 인덱스는 2입니다. 그래서 start 값을 code - 1로 설정합니다.
- stop: len(cipher)
- cipher 문자열의 길이(len(cipher))까지 반복을 실행합니다. 즉, 문자열의 끝까지 탐색하게 됩니다.
- step: code
- step 값이 code로 설정되어 있으므로, code 간격마다 반복이 일어납니다.
- 예를 들어, code가 3이라면, 2, 5, 8, 11 인덱스를 차례로 방문하게 됩니다.
예제 설명
cipher = "abcdefghijklm", code = 3일 경우를 예로 들어보겠습니다.
- start: 2 (code - 1 = 3 - 1)
- stop: 13 (len(cipher) = 13)
- step: 3
따라서 range(2, 13, 3)은 다음과 같은 인덱스들을 생성합니다:
- 2, 5, 8, 11
이 인덱스에 해당하는 cipher의 글자는 각각 "c", "f", "i", "l"입니다. 따라서 최종 결과는 "cfil"이 됩니다.
728x90