[구름 LEVEL] 삼각형 더하기 (Python)

이솔·2024년 7월 4일

[구름 LEVEL] 삼각형 더하기

https://level.goorm.io/exam/195147/%EC%82%BC%EA%B0%81%ED%98%95-%EB%8D%94%ED%95%98%EA%B8%B0/quiz/1


문제 설명


접근 방법

· 이중 for문으로 처리하되, 삼각형의 모양에 따라 나눠줄 필요가 있음

· 삼각형은 각 변에 평행한 직각이등변삼각형이므로, 회전에 따라 4가지로 분류

· 삼각형의 모양은 들어오는 삼각형의 좌표를 기반으로 분류

· if문으로 4가지를 구분


알고리즘 설계 및 구현

n, q = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(n)]

for _ in range(q):
	inp = list(map(int, input().split()))
	x_list = inp[::2]
	y_list = inp[1::2]
	c = list(zip(x_list, y_list))	
	min_x = min(x_list)
	max_x = max(x_list)
	min_y = min(y_list)
	max_y = max(y_list)
    # 직각이등변삼각형의 변의 길이
	n_t = max_y-min_y
	score = 0
	
    # 삼각형의 대각선이 왼쪽 위 -> 오른쪽 아래로 향하는 경우
	if (min_x, min_y) in c and (max_x, max_y) in c:
		if (max_x, min_y) in c:
			for i in range(n_t+1):
				for j in range(i+1):
					score += arr[min_x+i-1][min_y+j-1]
		else:
			for i in range(n_t+1):
				for j in range(n_t-i+1):
					score += arr[min_x+i-1][max_y-j-1]
	# 삼각형의 대각선이 오른쪽 위 -> 왼쪽 아래로 향하는 경우
    else:
		if (min_x, min_y) in c:
			for i in range(n_t+1):
				for j in range(n_t-i+1):
					score += arr[min_x+i-1][min_y+j-1]
		else:
			for i in range(n_t+1):
				for j in range(i+1):
					score += arr[min_x+i-1][max_y-j-1]

	print(score)

결과


0개의 댓글