카테고리 없음

[SW Expert Academy][D3][python] 1206. [S/W 문제해결 기본] 1일차 - View

코린영이 2023. 5. 8. 20:24
728x90
반응형

코딩테스트 문제 푸는 방향
1. 문제를 정독한다. 정독하면서 손으로 한 번 풀어본다.
2. 접근 방법을 구상한다.
3. 핵심 코드를 시각적으로 보이도록 손코딩한다. 
4. 코드를 구현한다. 
5. 디버깅 및 개선을 한다.
6. 부분 정답이 나올 시 1번으로 돌아가 더 꼼꼼하게 읽어보고 다른 접근 방법은 없는지 생각해본다. 

1206. [S/W 문제해결 기본] 1일차 - View

https://swexpertacademy.com/main/code/problem/problemDetail.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

좌우로 2칸 이상의 공백이 존재할 때 조망권이 확보되었다고 한다.

조망권이 확보된 세대의 개수를 구해야 한다. 

 

[제약 사항]

1. 가로 길이는 항상 1000이하

2. 맨 왼쪽 두 칸과 맨 오른쪽 두 칸에는 건물이 없다. (빨간색 땅)

3. 각 빌딩의 높이는 최대 255

4. 10개의 테스트 케이스(여기에서 오류나는 사람이 많은 것 같다)

 

[문제 해결 방향]

처음에 혼자서 생각을 했을 땐

건물들의 높이를 입력받은 리스트로 이중for문을 돌려서 

for i in 전체 리스트:

    for j in 리스트(i-2~i+2):

요렇게 이중for문을 돌리고 if문으로 리스트(i)가 제일 크다면 count하는 방식으로 하려고 했는데

한 줄에 여러 세대가 조망권이 있다는 조건을 빼고 생각해서 머리가 굳었었다.

 

더 이상 생각이 나지 않아서 유튜브 검색! 

구글보다 유튜브 센세들 설명이 더 자세하다ㅏ 

 

양 옆의 건물들의 최대 높이를 구한 다음에 

기준이 되는 건물의 높이가 양 옆 건물의 최대 높이보다 크다면 그 차이를 count 해주는 방식으로 문제를 풀어주면 된다.

설명을 듣고 다시 혼자 생각하니까 이해가 갔다

 

[파이썬 코드]

T = 10 # 다른 문제들처럼 테스트케이스를 입력받으면 안된다!! 문제 제대로 읽기!!

for test_case in range(1, T+1):
	N = int(input()) # 빌딩 개수 
	height = list(map(int, input().split())) # 건물 높이 리스트
    
	count = 0 # 조망권이 확보된 창문 세기
    
	for i in range(2, N-2): # 처음 2칸, 마지막 2칸은 건물이 없으므로 빼고 범위 지정한다. 
		# 기준이 되는 i의 양 옆 2칸씩 중에 최대 높이를 구해준다. 
		max_height = max(height[i-2:i] + height[i+1:i+3]) 
        
		# 만약 기준이 되는 i의 건물이 양옆 건물의  최대 높이보다 크다면
		if height[i] > max_height:
			count += height[i] - max_height # 그 차이만큼 세준다. 
            
	print("#"+str(test_case), str(count))

 

[참고 사이트]

https://www.youtube.com/watch?v=TAHxAALGPOM 

https://www.youtube.com/@IT-zk3so

 

문어박사 IT편의점

전자공학을 전공하고(전자공학 박사) 하드웨어, 펌웨어, 소프트웨어 26년차 개발자이며 대학, 대기업, 정부출연기관에서 23년차 강사인 (프로그래밍언어, 알고리즘, 프로세서, RTOS/리눅스, AI 등)

www.youtube.com

문어박사님이 풀어주신 문제들을 계속해서 풀어보려고 한다,, 

 

[느낀점]

조금씩 재밌어지는 느낌,, 는 사실 구라야,,

시작하기까지 준비가 조매 오래걸린다,,

728x90
반응형