Back/TIL
07.22 - 23. 프로그래머스 : 직사각형 넓이 구하기, 연속된 수의 합
떠굥
2023. 7. 23. 22:34
< 직사각형 넓이 구하기 >
1. 나의 풀이
직사각형의 넓이 = 가로 * 세로
주어지는 2차원 배열에서 dots[*][ ] *가 같다면 세로, dots[ ][*] *가 같다면 가로를 뜻한다.
(세로는 같은 x좌표 선상이지만 y좌표가 다를 것이며, 가로는 같은 y좌표 선상에서 x 좌표가 다르다.)
def solution(dots):
width = 0
height = 0
for i in dots:
if dots[0][0] == i[0]:
height += abs(dots[0][1]-i[1])
if dots[0][1] == i[1]:
width += abs(dots[1][0]-i[0])
return width*height
2. 다른사람의 풀이
꺼내고자 하는 값 dot[세로][가로] 위치와 숫자가 모두 같다.
이를 활용하여 max, min 함수로 큰 수 - 작은 수 = 선분의 길이
def solution(dots):
return (max(dots)[0] - min(dots)[0])*(max(dots)[1] - min(dots)[1])
3. 배운 것
abs = absolute value = 절대값 (무조건 결과의 양수값만을 리턴한다)
< 연속된 수의 합 >
1. 나의 풀이
def solution(num, total):
answer = []
standard = total//num
stap = num//2
for i in range(1, stap+1):
answer.append(standard-i)
answer.append(standard+i)
answer.append(standard)
answer.sort()
if num % 2 == 0:
answer.remove(answer[0])
return answer
2. 풀이과정
def solution(num, total):
answer = []
# 12 / 3 = 4
# 4 4 4
# 3 4 5
# print(12/3, 14/4)
# result가 '홀수'개 일 때
if total%num == 0:
# 기준값 = total//num
standard = total//num
# 기준값의 연속되는 숫자를 만들어서 answer다가 하나씩 append 해준다.
stap = num//2 # 양 쪽에 몇 개의 수가 들어갈지 계산한 것
# 왼쪽의 수 구하기
# answer = [ ...standard -stap, standard -2, standard -1, standard]
for i in range(1, stap+1):
answer.append(standard-i)
answer.append(standard+i)
answer.append(standard)
else:
standard = total//num
stap = num//2
print(standard, stap)
for i in range(1, stap):
answer.append(standard-i)
for i in range(1, stap+1):
answer.append(standard+i)
answer.append(standard)
# 기준 값
# 오른쪽의 수 구하기
# 기준 왼쪽 수 apppend
# 기준 값 append
# 기준 오른쪽 수 apppend
# answer = num//2
# answer = [ num-2, num -1, num, num+1, num+2 ]