본문 바로가기

알고리즘/소프티어

[파이썬] Softeer 연습문제 #13. 8단 변속기 완벽해설

문제

 

https://softeer.ai/practice/6283

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

현대자동차에서는 부드럽고 빠른 변속이 가능한 8단 습식 DCT 변속기를 개발하여 N라인 고성능차에 적용하였다. 관련하여 SW 엔지니어인 당신에게 연속적으로 변속이 가능한지 점검할 수 있는 프

softeer.ai

 

 

해설

 

이 문제는 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")

 

 

결과