코딩테스트

하루 코테 3개 풀기 - 6일차

songsua 2024. 12. 16. 00:04

오늘은 쉬운것부터 차근차근 해보자...

 

1. 문자열 뒤집기
문자열 my_string이 매개변수로 주어집니다.my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.

def solution(my_string):
    answer = ''
    return my_string[::-1]

 

for 구문을 활용해서 해보자

def solution(my_string) :
    answer = ' '
    for inx in range(len(my_string)-1,-1, -1) :
        #(my_string)-1 하여 my_string 의 길이를 반환하고 -1 을 넣으면  len(my_string) 의 제일 마지막 인덱스를 반환한다.
        #range의 두 번째 인수는 종료 시점을 표기한다. 세번 째 인수는 단계를 지정하며, -1을 넣을 경우 역순을 의미한다
        answer += my_string[inx]
    return my_string[::-1]

 

2. 암호 해독(https://school.programmers.co.kr/learn/courses/30/lessons/120892)

range() 함수에 대해서 정확하게 보고 가면,

range(a,b,c) : a부터 b까지 c 간격으로 진행 이다. b는 포함하지 않음

def solution(cipher, code):
    answer = ''
    for i in range(code-1,len(cipher), code) :
        answer+= cipher[i]
    return answer

 

다른 사람 풀이법에

def solution(cipher, code):
    answer = cipher[code-1::code]
    return answer

에서
[code-1::code]는 Python의 슬라이싱 문법이다. 

[start:stop:step]

start: 슬라이싱을 시작할 인덱스 (포함).
stop: 슬라이싱을 종료할 인덱스 (불포함).
step: 슬라이싱의 간격.

stop이 생략되면 슬라이싱은 문자열이나 리스트의 끝까지 진행

 

range는 동일하게 생략하면 안된다.
range() 함수는 종료 조건(stop)이 필수적

 

대체 

cipher = "helloworld"
code = 4
result = ''.join(cipher[i] for i in range(code-1, len(cipher), code))
print(result)  # 출력: 'lr'

 

 

3. 다트게임 (https://school.programmers.co.kr/learn/courses/30/lessons/17682)

import re

def solution(dartResult):
    bonus = {'S' : 1, 'D' : 2, 'T' : 3}
    option = {'' : 1, '*' : 2, '#' : -1}
    p = re.compile('(\d+)([SDT])([*#]?)')
    dart = p.findall(dartResult)
    print(dart)
    for i in range(len(dart)):
        if dart[i][2] == '*' and i > 0:
            dart[i-1] *= 2
        dart[i] = int(dart[i][0]) ** bonus[dart[i][1]] * option[dart[i][2]]

    answer = sum(dart)
    return answer

re.compile('패턴')  : 객체를 리턴해 주는 역활

데이터 처리에 있어서 텍스트에서 특정 문자열 검새그 치환 제거할 때 사용한다.

 

  • (\d+): 하나 이상의 숫자(점수).
  • ([SDT]): S, D, T 중 하나(보너스).
  • ([*#]?): * 또는 # 중 하나를 포함하거나 없을 수도 있음(옵션).

 

 

findall() :   dartResult에서 정규식 패턴에 맞는 모든 부분 문자열을 추출하여 리스트로 반환