1-9 연속하는 정수의 합 구하기 위한 값 정렬

choi hyein·2021년 3월 24일
0

파이썬의 삼항 연산자
if else문이 파이썬에서는 삼항 연산자가 된다.

# 삼항 연산자
# a if b else c

a = x if x > y else y
print('c는 0입니다.' if c == 0 else 'c는 0이 아닙니다.')

조건식 a if b else는 b를 평가한 값이 True이면 a, False면 c를 반환한다.
따라서, Print안의 내용은 c값이 0 이면 'c는 0입니다'를 반환하고,아니면 else 뒤의 문장을 반환한다.

연속하는 정수의 합을 구하기 위한 값 정렬

if a > b:
    a, b = b, a

여기서 주목할 부분은 위 코드이다. if 조건문 부분을 확인해보면 a가 b보다 크면,
두 값을 교환해서 a와 b를 오름차순으로 정렬한다. 그리고 b가 클 경우에는 if 조건문을 타지 않고 바로 for문으로 넘어가서 계산한다.

+와 -를 번갈아 출력하기

내가 생각한 코드는 이거였다.
나머지 연산자를 써서 나머지가 있으면 홀수가 되니까 +, 그렇지 않으면 짝수이니까 -로.
그리고, 마지막에 print()를 써서 줄바꿈해주는 걸로.
그런데 이렇게 하면 2가지 문제점이 존재한다.

1) for문을 반복할 때 마다 if문을 실행. n이 10,000이라면 if문도 10,000번 실행.
2) 상황에 따라 유연하게 수정을 하기가 어려움.

이 두 가지 문제점을 보완한 코드가 아래의 코드.

# +와 -를 번갈아가며 출력하기(교재 코드)
print('+와 -를 번갈아 출력합니다.')
n = int(input('몇 개를 출력할까요? : '))

for _ in range(n // 2):
    print('+-',end='')

if n % 2:
    print('+', end='')

print()

첫 번째로 확인할 부분은 for문 안에 index를 뜻하는 i대신 _가 들어가 있다는 점이다.
그 이유는, for문의 range 조건 부분에 n // 2 가 들어가 있어, for문을 순환하며 반환하는 값(index)를 사용할 필요가 없기 때문이다.
파이썬 언어의 특징인데, 무시하고 싶은 값을 _로 표시할 수 있다.

그리고 '+-'로 묶은 이유는 한 쌍으로 보고, n이 짝수일 경우에 출력되게 for문으로 만들어 놓은 것이다.

만약, 이 부분이 홀수라고 한다면, if문에 나머지 연산을 써서 +를 출력되게 만들었다.

이렇게 코드를 리팩토링하면 for문 안에서 if문을 수행하기 않기 때문에 효율적이고,
if문은 한 번만 수행하게 된다. 그리고 나눗셈도 (n // 2), (n % 2) 이렇게 두 번 밖에 하지 않아 더 좋은 코드가 된다.

  • 만약, 0부터 시작이 아니라 1부터 시작이라고 해도

for _ in range(1, n // 2 + 1):
    print('+-',end='')

이렇게 수정하면 되기 때문에 편리하다!

0개의 댓글

관련 채용 정보