코딩테스트 문제 푸는 방향
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
문어박사님이 풀어주신 문제들을 계속해서 풀어보려고 한다,,
[느낀점]
조금씩 재밌어지는 느낌,, 는 사실 구라야,,
시작하기까지 준비가 조매 오래걸린다,,