1. 최댓값 만들기(1)
문제 설명
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
나의 풀이
def solution(numbers):
a = max(numbers)
numbers.remove(a)
b = max(numbers)
return a*b
배열 numbers에서 가장 큰 값을 a라는 변수에 지정한 뒤 numbers에서 a값을 제외하고 제일 큰 값을 b로 두어 a*b로
최댓값을 구하도록 코드를 짰다.
다른분들의 풀이 + 개선점
def solution(numbers):
numbers.sort()
return numbers[-2] * numbers[-1]
sort를 통해 오름차순으로 정렬되게 한 뒤 제일 큰 값과 그 다음으로 큰값을 곱하면 최댓값이 되도록 함.
2. 최댓값 만들기(2)
문제 설명
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
나의 풀이
def solution(numbers):
numbers.sort()
rs1 = numbers[-1]*numbers[-2]
ls = [i for i in numbers if i < 0]
if len(ls) > 1 :
rs2 = ls[0]*ls[1]
if rs1<rs2:
return rs2
else:
return rs1
else:
return rs1
numbers를 오름차순으로 정렬하고 numbers의 음수 값만있는 ls 라는 리스트를 만든 다음
rs1에는 양수의 최댓값 , 만약 음수가 두개 이상이라면 rs2에는 음수의 최대값을 넣었다.
이후 rs1 과 rs2를 비교하여 큰값을 return 하도록 했다.
다른분들의 풀이 + 개선점
if문을 사용해서 음수의 개수를 구하고, 음수끼리 모으는 코드가 없이 그냥 정렬한 결과에서 제일 작은 두수와 제일 큰 두수를 곱한 값중에서 최대값을 return 하면 된다.
굳이 음수의 최대값이 아니면 max 값이 아닐테니..
def solution(numbers):
numbers.sort()
return max(numbers[0] * numbers[1], numbers[-1] * numbers[-2])
3. 최댓값과 최솟값
문제 설명
문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.
나의 풀이
def solution(s):
ls2 = []
ls = s.split(' ')
for i in ls:
ls2.append(int(i))
a = max(ls2)
b = min(ls2)
result = repr(b) + ' ' + repr(a)
return result
우선 문자열로 되어있는 s를 공백에 따라 나누어 ls2에 리스트 형태로 넣어주었다.
이때 요소들은 문자열이기 때문에 min max 비교를 위해 int 형식으로 바꾸어주었다.
그 뒤 최댓값과 최솟값을 각각 a와 b로 지정한 뒤 문자열로 바꾸는 repr 을 사용하여 원하는 실행값 형식에 맞춰 result를 적었다. 의도한 바가 이게 아닌걸 알면서도 어떻게 해야 공백이 있는 문자열로 만들어야할지 몰라 임의로 공백을 넣었다.
다른분들의 풀이 + 개선점
map 을 사용하는 방법이 있다.
list(map ( 함수 또는 표현식 , 값(주로 리스트) ) )의 실행값은 각각의 값을 함수나 표현식에 적용한 값으로 나오게 한다.
map 함수는 map 객체를 return 하기 때문에 list형식으로 출력하기위해 list 함수를 사용한다.
ex)
def two_times(x):
return x*2
list(map(two_times,[1,2,3,4])
>> [ 2,4,6,8]
아래가 map을 사용한 다른 분의 풀이.
def solution(s):
s = list(map(int,s.split()))
return str(min(s)) + " " + str(max(s))
나도 문자열로 변환하는데에 str함수를 사용하고 싶었으나 아래의 에러와 비슷하게 'str' object is not callable이라는 오류가 발생해서 아 못쓰는구나 싶어서 문자열로 변환하는 다른 함수인 repr을 사용하였다. 그런데 map에 관해 연습하다보니 아래와 같이 또 똑같은 오류가 발생했다.
처음에는 내가 사용한 str 함수가 문제인줄 알았는데 map함수를 사용할때에도 똑같은 오류가 발생했다.
이유가 무엇일까??
혹시나 싶어서 다른 새로운 jupyter notebook을 생성해서 똑같은 코드를 실행해봤더니 되는 것이었다~!!!!
조금 화가 났다
이유를 모르겠다... 이해가 안된다.. 이게 제일 화나...
혹시나 이유를 아시는 분은 저에게 댓글로 알려주세요~ㅎㅎ
참고로 챗지피티는 나에게 이러한 답을 주었다.
"'str' object is not callable" 오류는 주로 변수명이나 함수명과 같은 식별자(identifier)가 예상과 다르게 문자열로 할당되어 있는 경우에 발생합니다. 주어진 코드를 살펴보면 해당 오류와 직접적인 연관이 없는 것으로 보이지만, 어떤 다른 부분에서 이 오류를 유발할 수 있습니다.
그 어떤 다른 부분이 어디인지를 알려줘야지~~!
'프로그래머스' 카테고리의 다른 글
프로그래머스 Python Lv.2 영어 끝말잇기 / Lv.1 핸드폰 번호 가리기 (0) | 2023.11.22 |
---|---|
프로그래머스 Python 모음제거 / x만큼 간격이 있는 n개의 숫자 (4) | 2023.11.22 |
프로그래머스 Python 대소문자 바꿔서 출력하기/ 배열에서 문자열 대소문자 변환하기 (6) | 2023.11.20 |
프로그래머스 삼각형의 완성조건 (2) | 2023.11.20 |
프로그래머스 Python 피자나눠먹기 (6) | 2023.11.20 |