프로그래머스 Lv0. 문자열 뒤집기, 세로 읽기, qr code
안녕하세요 머킹입니다.
드디어 목요일부터 추석이네요.
추석에는 또 어떻게 알고리즘을 풀고 프로젝트를 할 수 있을지.. 고민입니다.
문제 설명
문자열 my_string과 정수 s, e가 매개변수로 주어질 때, my_string에서 인덱스 s부터 인덱스 e까지를 뒤집은 문자열을 return 하는 solution 함수를 작성해 주세요.
제한사항
my_string은 숫자와 알파벳으로만 이루어져 있습니다.
1 ≤ my_string의 길이 ≤ 1,000
0 ≤ s ≤ e < my_string의 길이
def solution(my_string, s, e):
return my_string.reverse[s:e]
뭔가 이렇게 하면 될 것 같은데 안되네요..
reverse 함수를 쓰는 게 아닐까 싶은 생각이 들었습니다.
def solution(my_string, s, e):
return my_string[:s] + my_string[s:e+1][::-1] + my_string[e+1:]
찾아보니 reverse 함수를 사용할 수 없더라고요.
문자열은 불변(immutable)하므로 이 메서드를 직접 사용할 수 없습니다.라고 GPT가 합니다.
세로 읽기
문제 설명
문자열 my_string과 두 정수 m, c가 주어집니다. my_string을 한 줄에 m 글자씩 가로로 적었을 때 왼쪽부터 세로로 c번째 열에 적힌 글자들을 문자열로 return 하는 solution 함수를 작성해 주세요.
제한사항
my_string은 영소문자로 이루어져 있습니다.
1 ≤ m ≤ my_string의 길이 ≤ 1,000
m은 my_string 길이의 약수로만 주어집니다.
1 ≤ c ≤ m
문제 해석을 보는데 PCCP 역량 대비 교육에서 들었던 것이 생각나서 좀 반가웠습니다.
PCCP에서 배운 대로 이해는 하겠는데 또 막상 코드로 짜려니까 감이 잘 안 오네요.
def solution(my_string, m, c):
answer = ''
m_string = [my_string[i:i+m] for i in range(0, len(my_string), m)]
for line in m_string:
if c - 1 < len(line):
answer += line[c - 1]
return answer
이 코드는 주어진 문자열 my_string을 처리하여, 문자열을 m 글자씩 나누고,
그 중에서 c번째 열에 있는 글자들을 추출하는 함수입니다.
m_string이라는 빈 리스트를 만듭니다.
이 리스트는 문자열을 m 글자씩 나눈 부분 문자열들을 저장할 용도입니다.
my_string 문자열을 반복문을 사용하여 m 글자씩 나누어 m_string 리스트에 저장합니다.
range(0, len(my_string), m)는 my_string을 m 글자 간격으로 나누는데 사용됩니다.
예를 들어, "ihrhbakrfpndopljhygc" 문자열을 m=4로 나누면 ['ihrh', 'bakr', 'fpnd', 'oplj', 'hygc']와 같이 분할됩니다.
그 다음, m_string 리스트의 각 부분 문자열에 대해 반복합니다.
각 부분 문자열은 line 변수에 저장됩니다.
if c - 1 < len(line):을 사용하여 c번째 열에 글자가 있는지 확인합니다.
c번째 열은 리스트의 인덱스와 다르게 1부터 시작하므로,
실제 인덱스로 변환하기 위해 c - 1을 사용합니다.
answer 문자열에 line[c - 1]을 추가합니다.
이것은 c번째 열의 글자를 결과 문자열에 더하는 작업입니다.
반복문이 종료되면 answer 문자열을 반환합니다.
이 문자열에는 c번째 열에 있는 글자들이 모두 추가되어 있습니다.
이러한 방식으로 함수는 주어진 문자열을 가로로 m 글자씩 쪼개고,
세로로 c번째 열에 있는 글자들을 추출하여 반환합니다.
남의 코드를 보는데 진짜 머리를 탁! 쳤습니다.
def solution(s, m, c):
return s[c-1::m]
이게 진짜 파이썬이겠죠...
qr code
문제 설명
두 정수 q, r과 문자열 code가 주어질 때, code의 각 인덱스를 q로 나누었을 때 나머지가 r인 위치의 문자를 앞에서부터 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
제한사항
0 ≤ r < q ≤ 20
r < code의 길이 ≤ 1,000
code는 영소문자로만 이루어져 있습니다.
내 풀이
def solution(q, r, code):
if code // q:
answer[r+1:]
answer = ''
return answer
진짜 뭘까요? 앞에 문제들을 보면서 어떻게 하면 될 것 같다는 감은 있는데
+1을 붙이는 게 저의 최선의 판단인가 봅니다..
def solution(q, r, code):
answer = ''
for i, char in enumerate(code):
if i % q == r:
answer += char
return answer
def solution(q, r, code):
return code[r::q]
다른 사람의 코드인데 정말 놀랍지 않나요..!!!
파이썬은 정말 무궁무진하네요..
'오늘부터 코딩테스트' 카테고리의 다른 글
[오늘부터 코딩테스트]프로그래머스 코딩 기초 프로그램 풀기 (0) | 2023.10.04 |
---|---|
[오늘부터 코딩테스트]프로그래머스 코딩 기초 프로그램 풀기 (0) | 2023.09.27 |
[오늘부터 코딩테스트]프로그래머스 코딩 기초 프로그램 풀기 (0) | 2023.09.26 |
[오늘부터 코딩테스트]프로그래머스 코딩 기초 프로그램 풀기 (0) | 2023.09.23 |
[오늘부터 코딩테스트]프로그래머스 코딩 기초 프로그램 풀기 (0) | 2023.09.21 |