https://github.com/sdoram/Algorithm
1. 프로그래머스 LV2 - 최솟값 만들기
문제점
길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다.
배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다.
이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱한 값을 누적하여 더합니다.
이때 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다.
(단, 각 배열에서 k번째 숫자를 뽑았다면 다음에 k번째 숫자는 다시 뽑을 수 없습니다.)
# A, B = 자연수
# A와B 에서 각각 하나씩 뽑아서 곱하는 걸 누적
# 누적 결과값을 최소로 만들기
# 그럼 A의 최댓값과 B의 최솟값을 곱하는 형식으로 만들어야 할 듯 sort와 reverse사용
문제점 1 A,B를 같이 for문을 돌릴 방법 dictionary사용 리스트를 풀어서 문자열로 바꾸고 슬라이싱을 0.-1부터로 시작 for문을 len만큼 돌리기
시도해 본 것들
def solution(A,B):
A.sort()
B.sort(reverse=True)
for i in A:
A_num = A.pop()
B_num = B.pop()
print(A_num,B_num)
answer += A_num * B_num
마지막 1개가 pop()이 안됨
for i in range(1,(len(A)+1)):
range를 통해서 수정
해결 방법
def solution(A,B):
answer = 0
# 정렬, 최솟값 구할 준비
A.sort()
B.sort(reverse=True)
for i in range(1,(len(A)+1)):
A_num = A.pop()
B_num = B.pop()
# A와B 에서 각각 하나씩 뽑아서 곱하는걸 누적
answer += A_num * B_num
return answer
알게 된 점
for i in range(1,(len(A)+1)):
이라는 list의 길이로 for문을 작동하는 코드 구조에 익숙해졌다.
주석으로 풀이 방향을 풀어쓰고 기본적인 작성법에 익숙해지면서 편집기 없이도 어려움 없이 해결할 수 있었다.
1. 프로그래머스 LV1 - 자연수 뒤집어 배열로 만들기
문제점
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요.
예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
# n은 자연수
# pop(), slice() 사용
시도해 본 것들
def solution(n):
# n은 자연수
# pop(), slice()
answer = 0
for i in range(1,n+1):
print(i)
return answer
n은 int여서 for문이 글자수가 아니라 적혀있는 숫자 기준으로 작동
n = str(n)
n = list(n)
n을 형변환하기
int를 바로 list로 형 변환 시 에러 발생
해결 방법
def solution(n):
# n은 자연수
# pop(), slice()
answer = []
# n 형변환
n = str(n)
n = list(n)
# for문의 범위를 설정하는데 성공했는데 헷갈린다.
for i in range(1, (len(n)+1)):
num = n.pop()
answer.append(int(num))
return answe
알게 된 점
for i in range(1,(len(A)+1)):
리스트로 바꾸면서 for문의 범위 설정을 위의 코드를 바로 참고해서 썼는데 조금만 조건이 추가돼도 범위 설정에서 애를 먹는 것을 보면 각 자료형의 특징을 잘 사용하지 못하는 것 같다.
'개발일지 > TIL' 카테고리의 다른 글
TIL 23-04-06 (0) | 2023.04.06 |
---|---|
TIL 23-04-05 (0) | 2023.04.05 |
TIL 23-04-03 (2) | 2023.04.03 |
TIL 23-04-02 (0) | 2023.04.02 |
TIL 23-04-01 (0) | 2023.04.01 |