본문 바로가기
  • 머킹이의 머신로그
오늘부터 코딩테스트

[오늘부터 코딩테스트]프로그래머스 코딩 기초 프로그램 풀기

by 머킹 2023. 9. 26.
728x90

프로그래머스 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]

다른 사람의 코드인데 정말 놀랍지 않나요..!!!

파이썬은 정말 무궁무진하네요..