프로그래머스_Python_오답노트_map, isdigit(), ''.join(), .split(), append(), add(), ''과 []사용 숫자 더하기 및 연산자.

HEE·2025년 3월 27일
0
post-thumbnail

1. 프로그래머스 python 코딩테스트 입문

Level 0. 숨어있는 숫자의 덧셈(2)

문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

정답 확인

1. i.isdigit()을 사용하여 풀어쓰기

def solution(my_string):
    num = ''  # 임시로 숫자를 이어 붙이기 위해 사용
    nums = []  # 숫자들을 저장할 리스트

    for i in my_string:
        if i.isdigit():  # 숫자라면
            num += i  # 계속 이어 붙이기 (문자열로)
        else:  # 문자가 나오면 지금까지 모은 숫자를 리스트에 추가
            if num:  # 만약 숫자가 저장돼 있다면
                nums.append(int(num))  # 리스트에 추가 (정수로 변환)
                num = ''  # 숫자 초기화

    if num:  # 마지막에 남은 숫자가 있다면 추가
        nums.append(int(num))

    return sum(nums)  # 숫자 리스트의 합을 반환

+=연산자 활용

  • str+=str 문자 붙이기 '1' + '23' = '123'
  • list += list 리스트 확장 [1,2] += [3,4] = [1,2,3,4]
  • list += [int(i)]는 타입이 달라서 안됨.
  • 숫자 += 숫자 a = 5, a += 3 , 5+3 = 8
  • if - else 구문에서 else 굳이 안써도 됨.
    else가 없으면 그냥 아무일 없이 넘어감.
  • map(int, nums) : 각 문자열을 int로 바꿔줌.
    ['1', '34'] -> [1, 34]
  • sum(map(int,리스트)) : 나중에 한번에 숫자로 바꾸고 싶다.
  • append(int(num)) : 한개씩 바로 바로 바꾸고 싶다.
  • num += i 로 숫자를 하나씩 모아, [123] 이런식으로 모아서 뭉쳐짐.
  • (알파벳이 나오지 않아) 뭉쳐놓은 숫자를 nums = [] 리스트에 하나씩 넣어줌.
  • 넣어줄때 매번 int()하나씩 해서 넣어주어야함.
  • int()는 리스트 전체에 적용을 못하기 때문.
    (전체 적용을 위해서는 map함수를 써야함.)

.append() vs add() 차이!


2. map 함수 사용하기

def solution(my_string):
    num = ''
    nums = []
    for i in my_string:
        if i.isdigit():
            num += i
        else:
            if num:
                nums.append(num)  # ❗여기선 문자열로 저장!
                num = ''
    if num:
        nums.append(num)
    return sum(map(int, nums)) 

map함수

  • map(int, nums) : 각 문자열을 int로 바꿔줌.
    ['1', '34'] -> [1, 34]
  • sum(map(int,리스트)) : 나중에 한번에 숫자로 바꾸고 싶다.
  • append(int(num)) : 한개씩 바로 바로 바꾸고 싶다.

3. 발상의 전환!!!

def solution(my_string):
    s = ''.join(i if i.isdigit() else ' ' for i in my_string)
    return sum(int(i) for i in s.split())

''.join()함수와 .split()함수 사용

  • ''.join() 숫자는 join함수를 쓸 수 없음. '문자'만 사용 가능!
    (join할때, int(i)를 사용하지 못한 이유.)
  • 문자열.split() : 문자열을 특정 문자로 잘라서, 결과로 리스트를 만들어냄. 따라서 리스트.split()라는건 없음.
  • .split()인 경우 : ()공백이라 공백 기준으로 자르는것.
  1. [ab1CD22E4g2] 인 경우, 숫자는 리스트에 담고, 영어문자들을 ''공백으로 담아서 새로운 []리스트를 만들기로함.
  2. [ 3 4 2345 9]와 같은 리스트를 만들었으면, 공백을 기준으로 숫자를 나눔. [3,4,2345,9] 같이 만든 후
  3. 자연수로 변경해서 모두 더해줌.

2. 프로그래머스 python 코딩테스트 입문

Level 0. 접미사 배열

어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다.
문자열 my_string이 매개변수로 주어질 때, my_string의 모든 접미사를 사전순으로 정렬한 문자열 배열을 return 하는 solution 함수를 작성해 주세요.

정답 확인

def solution(my_string):
    a = []
    for i in range(len(my_string)):
        a.append(my_string[i:])
    return sorted(a)
  • append()+=연산자를 사용할 때 결과 차이:
profile
ALL IS WELL

0개의 댓글