관리 메뉴

솜씨좋은장씨

[Programmers] 숨어있는 숫자의 덧셈 (1) (Python) (feat.ChatGPT) 본문

Programming/코딩 1일 1문제

[Programmers] 숨어있는 숫자의 덧셈 (1) (Python) (feat.ChatGPT)

솜씨좋은장씨 2023. 4. 21. 23:49
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 프로그래머스의 숨어있는 숫자의 덧셈 (1) 입니다.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

👨🏻‍💻 문제 풀이 - SOMJANG

1. 입력 받은 문자열을 list 로 변환합니다.

2. 문자열에서 하나씩 꺼내면서 숫자인 것만 list 에 남겨줍니다.

3. 마지막으로 숫자만 남아있는 list 를 모두 더하면 끝!

👨🏻‍💻 코드 ( Solution ) - SOMJANG

def solution(my_string):
    answer = sum([int(word) for word in list(my_string) if word.isdigit()])
    
    return answer

👨🏻‍💻 ChatGPT 야 부탁해!

👨🏻‍💻 SOMJANG

당신은 Python3 언어로 프로그래밍을 할 수 있는 개발자 입니다.

문제가 주어지면 문제의 맥락을 파악하고 파악한 내용을 Python3 언어를 사용하여 코드로 작성합니다.

작성한 코드에서 설명이 필요한 부분에는 주석을 달아 설명해줍니다.

이제 문제를 드리겠습니다.

 

아래 문제를 해결해주세요.

 

문제 설명

문자열 my_string이 매개변수로 주어집니다.

my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

 

제한사항

1 ≤ my_string의 길이 ≤ 1,000

my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.

 

입출력 예

my_string result

"aAb1B2cC34oOp" 10

"1a2b3c4d123" 16

 

입출력 예 설명

입출력 예 #1

"aAb1B2cC34oOp"안의 한자리 자연수는 1, 2, 3, 4 입니다.

따라서 1 + 2 + 3 + 4 = 10 을 return합니다.

 

입출력 예 #2 "1a2b3c4d123Z"안의 한자리 자연수는 1, 2, 3, 4, 1, 2, 3 입니다.

따라서 1 + 2 + 3 + 4 + 1 + 2 + 3 = 16 을 return합니다.

 

유의사항

연속된 숫자도 각각 한 자리 숫자로 취급합니다.

💻 ChatGPT - 잘 풀었지만! 유의사항을 고려하지 못한 풀이

다음은 주어진 문제를 해결하는 Python 함수입니다.

def solution(my_string):
    numbers = []  # 자연수들을 저장할 리스트 생성
    num = ""  # 자연수를 만들기 위한 임시 문자열 변수
    for char in my_string:
        if char.isdigit():  # 문자열이 숫자인 경우
            num += char  # 임시 문자열에 추가
        else:  # 문자열이 숫자가 아닌 경우
            if num:  # 이전까지 숫자가 나온 적이 있다면
                numbers.append(int(num))  # 자연수로 변환하여 리스트에 추가
                num = ""  # 임시 문자열 초기화
    if num:  # 마지막 문자열이 숫자인 경우
        numbers.append(int(num))  # 자연수로 변환하여 리스트에 추가
    return sum(numbers)  # 자연수들의 합 반환

위 함수에서는 입력된 문자열에서 모든 자연수들을 추출하여 이들의 합을 계산하여 반환합니다. 이를 위해, 주어진 문자열을 한 문자씩 검사하여 숫자인 경우 임시 문자열에 추가합니다. 이 때, 연속된 숫자도 각각 한 자리 숫자로 취급합니다. 문자열이 숫자가 아닌 경우, 이전까지 임시 문자열에 추가된 문자열을 자연수로 변환하여 리스트에 추가합니다. 이 과정을 모든 문자열에 대해 반복하면, 모든 자연수들을 추출할 수 있습니다. 마지막 문자열까지 검사가 끝난 후에도, 마지막 임시 문자열이 자연수인 경우 이를 리스트에 추가합니다. 마지막으로, 추출된 자연수들의 합을 계산하여 반환합니다.

👨🏻‍💻 SOMJANG - 유의사항 알려주기

문제를 풀어줘서 고마워 하지만 이 문제는 문자열안의 숫자가 연속되는 것은 고려하지 않아도돼

그냥 문자열 안에 포함되어있는 숫자가 있으면 연속되던 연속되지 않던 한 자리 숫자로 찾아서 모두 더해주면 돼

"aAb1B2cC34oOp" 가 입력값일 경우 여기서 34같이 이어진 수가 있지만

이를 34가 아니라 3, 4 로 나눠서 구해야 해

"aAb1B2cC34oOp" -> 1, 2, 3, 4 => 1 + 2 + 3 + 4 => 10

💻 ChatGPT - 제대로 된 풀이!

알겠습니다. 새로운 정보 감사합니다! 그렇다면 다음과 같이 코드를 수정하면 됩니다.

def solution(my_string):
    numbers = []  # 자연수들을 저장할 리스트 생성
    for char in my_string:
        if char.isdigit():  # 문자열이 숫자인 경우
            numbers.append(int(char))  # 숫자를 자연수로 변환하여 리스트에 추가
    return sum(numbers)  # 자연수들의 합 반환

위 코드는 입력된 문자열에서 모든 자연수들을 추출하여 이들의 합을 계산하여 반환합니다. 이를 위해, 주어진 문자열을 한 문자씩 검사하여 숫자인 경우 자연수로 변환하여 리스트에 추가합니다. 이 때, 연속된 숫자도 각각 한 자리 숫자로 취급합니다. 모든 문자열에 대해 이 과정을 반복하면, 모든 자연수들을 추출할 수 있습니다. 마지막으로, 추출된 자연수들의 합을 계산하여 반환합니다.

 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments