문제
https://softeer.ai/practice/6283
해설
이 문제는 ascending 인지, descending 인지를 판단하고, 둘다 아니면 mixed 라고 판단하는 알고리즘을 짜주기만 하면 된다.
즉 8개의 기어가 주어졌을 때, 가장 왼쪽부터 오른쪽으로 하나하나 확인을 하는데, 만약 "이전의 기어값 - 다음의 기어값"이 +1이라면 앞의 기어값이 뒤의 기어값보다 한개 더 높다는 의미이므로 "descending"이 되고, "이전의 기어값 - 다음의 기어값"이 -1이라면 앞의 기어값이 뒤의 기어값보다 한개 더 낮다는 의미이므로 "ascending"이 된다.
반대로 이전의 기어값과 다음의 기어값의 차이의 절대값이 1보다 크면 결국 mixed가 될 것이다.
따라서 이를 코드 논리로 생각하면,
ascending을 판단하는 bool 변수 (b_ascend), descending을 판단하는 bool 변수(b_descent)를 하나하나 생성해주고, True로 초기화시켜준다.
그리고
1. "이전의 기어값 - 다음의 기어값"이 +1이다? -> b_ascend = False 설정
2. "이전의 기어값 - 다음의 기어값"이 -1이다? -> b_descent = False 설정
3. "이전의 기어값 - 다음의 기어값"의 절대값이 1보다 크다 -> b_ascend = False, b_descent = False로 설정
위의 로직만 완성해주면 끝난다.
마지막으로
b_ascend가 True -> "ascending"
b_descend가 True -> "descending"
둘다 False -> "mixed"
를 출력해주기만 하면 코드가 완성된다.
코드
import sys
gears = list(map(int, sys.stdin.readline().split()))
b_ascend = True
b_descend = True
prev_gear = 0
for gear in gears:
if (prev_gear==0):
prev_gear = gear
else:
if (abs(prev_gear-gear)>1):
b_ascend = False
b_descend = False
elif (prev_gear-gear) == 1:
b_ascend = False
elif (prev_gear-gear) == -1:
b_descend = False
prev_gear = gear
if (b_ascend):
print("ascending")
elif (b_descend):
print("descending")
else:
print("mixed")
결과
'알고리즘 > 소프티어' 카테고리의 다른 글
[파이썬] Softeer 연습문제 #15. 지도 자동 구축 완벽해설 (2) | 2023.12.31 |
---|---|
[파이썬] Softeer 연습문제 #14. 동계 테스트 시점 예측 완벽해설 (2) | 2023.12.30 |
[파이썬] Softeer 연습문제 #12. 바이러스 완벽해설 (1) | 2023.12.19 |
[파이썬] Softeer 연습문제 #11. 장애물 인식 프로그램 완벽해설 (1) | 2023.12.18 |
[파이썬] Softeer 연습문제 #10. 복잡한 조립라인2 완벽해설 (0) | 2023.12.14 |