알고리즘 공부를 위해 코드업 사이트(https://codeup.kr/)의 기초 100제를 시작합니다.

블로그에 올라온 모든 코드는 파이썬(Python)으로 작성되어 있습니다.   

 

Python의 기초 100제를 확인하기 위해서는 다음 사이트로 이동하면 됩니다. 

https://codeup.kr/problemsetsol.php?psid=33 

 

문제집 / Python 기초 100제

 

codeup.kr

 

6076 : [기초-반복실행구조] 정수 1개 입력받아 그 수까지 출력하기2(설명)(py)

정수(0 ~ 100) 1개를 입력받아 0부터 그 수까지 순서대로 출력해보자.

 

▷ 참고

range(n) 은 0, 1, 2, ... , n-2, n-1 까지의 수열을 의미한다.
예를 들어 range(3) 은 0, 1, 2 인 수열을 의미한다.

for i in range(n) :    #range(n)에 들어있는(in) 각각의 수에 대해서(for) 순서대로 i에 저장해 가면서...
이때의 for는 각각의 값에 대하여... 라는 for each 의 의미를 가진다고 생각할 수 있다.

range(끝)
range(시작, 끝)
range(시작, 끝, 증감)
형태로 수열을 표현할 수 있다. 시작 수는 포함이고, 끝 수는 포함되지 않는다. [시작, 끝)
증감할 수를 작성하지 않으면 +1이 된다.

반복 실행구조에 반복 횟수를 기록/저장하는 변수로 i를 자주 사용하는데,
i 는 반복자(iterator)를 나타내는 i라고 생각할 수 있다. i, j, k ... 알파벳 순으로 사용하기도 한다.

 

▷ 해설

while문 외에도 반복문이 있다.

for문을 이용하기 위해선 수열이 필요한데 이때 수열을 생성하는 함수가 range이다.

순차적으로 값을 넣어보는 대부분의 경우 for문을 사용한다. for문에서는 현재 반복횟수를 저장하는 변수가 존재한다

n = int(input())

for i in range(0, n+1):
    print(i)

 

6077 : [기초-종합] 짝수 합 구하기(설명)(py)

정수(1 ~ 100) 1개를 입력받아 1부터 그 수까지 짝수의 합을 구해보자.

 

▷ 참고

while 이나 for 반복실행구조를 이용할 수 있다.
다른 방법이나 while 반복실행구조를 이용해서도 성공시켜 보자.

 

▷ 해설

for문을 사용할 수 있으면 while문도 사용이 가능하다.

다음문제에서는 for문을 while문으로 바꿨을 때 달라진 점을 확인해보자

n = int(input())
sum = 0

for i in range(1, n+1):
    if i % 2 == 0:
       sum = sum + i 

print(sum)
n = int(input())

i = 1
sum = 0

while i < n+1:
    if i % 2 == 0:
       sum = sum + i 
    i = i+1
    
print(sum)

 

6078 : [기초-종합] 원하는 문자가 입력될 때까지 반복 출력하기(py)

영문 소문자 'q'가 입력될 때까지
입력한 문자를 계속 출력하는 프로그램을 작성해보자.

 

▷ 해설

while문을 이용해 계속 값을 입력 받다가 특정 값이 오면 출력한 후 while문을 빠져나오는 코드를 작성하면 된다.

이처럼 while문은 끝을 모르는 반복을 할 때 주로 사용된다.

while True:
    c = input()
    print(c)
    if c == 'q':
        break

 

6079 : [기초-종합] 언제까지 더해야 할까?(py)

1, 2, 3 ... 을 계속 더해 나갈 때,
그 합이 입력한 정수(0 ~ 1000)보다 같거나 작을 때까지만
계속 더하는 프로그램을 작성해보자.

즉, 1부터 n까지 정수를 계속 더해 나간다고 할 때,
어디까지 더해야 입력한 수보다 같거나 커지는 지를 알아보고자하는 문제이다.

 

▷ 해설

입력 받은 값이 55일 경우 1부터 10까지 더하게 되면 55보다 크거나 같아지게 되므로 최종 출력 값은 10이 된다.

sum에서는 1부터 값을 더하며 n보다 크거나 같아질때를 if문으로 확인하는 코드를 작성하면 된다.  

n = int(input())

i = 1
sum = 0

while True:
    sum = sum+i
    if sum >= n:
        break
    i = i + 1

print(i)

 

6080 : [기초-종합] 주사위 2개 던지기(설명)(py)

1부터 n까지, 1부터 m까지 숫자가 적힌 서로 다른 주사위 2개를 던졌을 때,
나올 수 있는 모든 경우를 출력해보자.

 

▷ 참고

바깥쪽의 i 값이 1부터 n까지 순서대로 바뀌는 각각의 동안에
안쪽의 j 값이 다시 1부터 m까지 변하며 출력되는 코드이다.

조건선택 실행구조 안에 다른 조건선택 실행구조를 넣어 처리할 수 있는 것과 마찬가지로
반복 실행구조 안에 다른 반복 실행구조를 넣어 처리할 수 있다.

원하는 형태로 실행 구조를 결합하거나 중첩시킬 수 있다.

 

▷ 해설

두 주사위로 나올 수 있는 모든 경우의 수를 출력해야한다.

i 주사위가 1일때 j의 모든 값을 한번씩 출력하는 동작을 i의 숫자까지 반복하면 된다.

n, m = input().split()

for i in range(1, int(n)+1):
    for j in range(1, int(m)+1):
        print("%d %d"%(i, j))

알고리즘 공부를 위해 코드업 사이트(https://codeup.kr/)의 기초 100제를 시작합니다.

블로그에 올라온 모든 코드는 파이썬(Python)으로 작성되어 있습니다.   

 

Python의 기초 100제를 확인하기 위해서는 다음 사이트로 이동하면 됩니다. 

https://codeup.kr/problemsetsol.php?psid=33 

 

문제집 / Python 기초 100제

 

codeup.kr

 

6071 : [기초-반복실행구조] 0 입력될 때까지 무한 출력하기(설명)(py)

임의의 정수가 줄을 바꿔 계속 입력된다.
-2147483648 ~ +2147483647, 단 개수는 알 수 없다.

0이 아니면 입력된 정수를 출력하고, 0이 입력되면 출력을 중단해보자.

 

▷ 참고

if 조건식 :
  ...

구조를 사용하면,
주어진 조건식의 평가 결과가 True 인 경우에만, 들여쓰기로 구분된 코드블록이 실행된다.

if 를 while 로 바꾸면?

while 조건식 :
  ...


와 같은 방법으로 반복해서 실행시킬 수 있다.

실행되는 과정은
1. 조건식을 평가한다.
2. True 인 경우 코드블록을 실행한다.
3. 다시 조건식을 평가한다.
4. True 인 경우 코드블록을 실행한다.

 

 조건식의 평가 값이 False 인 경우 반복을 중단하고, 그 다음 명령을 실행한다.

조건식의 평가 결과가 True 동안만 반복 실행된다. 

반복실행구조 안에 다른 조건/선택실행구조를 넣을 수도 있고...
조건/선택실행구조 안에 다른 반복실행구조를 넣을 수도 있다.

 

▷ 해설

while 문은 조건이 False 가 될때 까지 동작한다 위의 문제에서는 0이 아닌 값은 계속 입력 받으므로 n이 0이 아닐때 조건문이 동작한다.

이 외에도 break문을 통해 while문이 if문의 조건이 되면 빠져나올 수 있다

이를 고려해서 코드를 작성해보자

#조건문에 들어가기 위해 n의 초기값을 설정한다
n = 1

while n != 0:
    n = int(input())
    # if문이 없으면 0이여도 값을 출력함
    if n!=0 :
        print(n)
while True:
    n = int(input())
    
    # 만약 0이라면 whlie문을 탈출한다
    if n == 0:
    	break
    else:
    	print(n)

 

6072 : [기초-반복실행구조] 정수 1개 입력받아 카운트다운 출력하기1(설명)(py)

정수(1 ~ 100) 1개가 입력되었을 때 카운트다운을 출력해보자.

while 조건식 :
  ...
반복 실행구조를 사용해 보자.

 

▷ 참고

n = n-1  #n에 저장되어있던 값에서 1만큼 뺀 후, 그 값을 다시 n에 저장시킨다.
n -= 1 과 같이 짧게 작성할 수도 있다. n -= 1 은 n = n-1 과 같은 의미이다.
이렇게 산술연산자(+, -, *, / ... )와 대입 연산자(=)를 함께 쓰는 것을 복합대입연산자라고도 부른다.
같은 방법으로 +=, *=, /=, //=, %=, &=, |=, ^=, >>=, <<=, **= 등과 같이 짧게 작성할 수 있다.

처음에 조건식을 검사하고, 그 다음에 실행하고, 그 다음에 값을 바꾸고...
다시 조건식을 검사하고, 실행하고, 값을 바꾸고...

 

▷ 해설

입력된 하나의 값이 0이 될때가지 출력하고 1을 빼는 과정을 반복한다.

n = int(input())

while n != 0:
    print(n)
    n = n - 1

 

6073 : [기초-반복실행구조] 정수 1개 입력받아 카운트다운 출력하기2(py)

정수(1 ~ 100) 1개가 입력되었을 때 정수-1 부터 0 까지 카운트다운을 출력해보자.

while 조건식 :
  ...

반복 실행구조를 사용해 보자.

 

▷ 참고

조건검사, 출력, 감소의 순서와 타이밍을 잘 생각해보자.

 

▷ 해설

위의 문제와 비슷하지만 n에 1을 빼는 부분과 print문의 위치를 서로 바꾸면 n보다 1이 빠진 값 부터 0까지의 값을 출력값으로 보게된다.

n = int(input())

while n != 0:
    n = n - 1
    print(n)

 

6074 : [기초-반복실행구조] 문자 1개 입력받아 알파벳 출력하기(설명)(py)

영문 소문자(a ~ z) 1개가 입력되었을 때,
a부터 그 문자까지의 알파벳을 순서대로 출력해보자.

▷ 참고

알파벳 문자 a의 정수값은 ord('a')로 알아낼 수 있다.
chr(정수값)을 이용하면 유니코드 문자로 출력할 수 있다.
print(..., end=' ') 와 같이 작성하면 값 출력 후 공백문자 ' '를 출력한다. 즉, 마지막에 줄을 바꾸지 않고 빈칸만 띄운다.
(end='\n'로 작성하거나 생략하면, 값을 출력한 후 마지막(end)에 줄바꿈(newline)이 된다.)

 

▷ 해설

c는 우리가 입력한 소문자며 a는 첫 알파벳부터 시작하는 변수이다.

a의 값은 1씩 증가하면서 c보다 커지면 탈출하게 된다.

단, 출력할 때 줄바꿈이 아닌 공백으로 끝을 내야하므로 print의 end를 설정해야한다.  

c = ord(input()) + 1
a = ord('a')

while a < c:
    print(chr(a), end=' ')
    a = a + 1 

 

6075 : [기초-반복실행구조] 정수 1개 입력받아 그 수까지 출력하기1(py)

정수(0 ~ 100) 1개를 입력받아 0부터 그 수까지 순서대로 출력해보자.

 

▷ 해설

6074문제의 정수 버전이다. 단 줄바꿈을 통해 숫자를 구분한다.

n = int(input())
f = 0

while f <= n:
    print(f)
    f = f + 1

알고리즘 공부를 위해 코드업 사이트(https://codeup.kr/)의 기초 100제를 시작합니다.

블로그에 올라온 모든 코드는 파이썬(Python)으로 작성되어 있습니다.   

 

Python의 기초 100제를 확인하기 위해서는 다음 사이트로 이동하면 됩니다. 

https://codeup.kr/problemsetsol.php?psid=33 

 

문제집 / Python 기초 100제

 

codeup.kr

 

6066 : [기초-조건/선택실행구조] 정수 3개 입력받아 짝/홀 출력하기(설명)(py)

3개의 정수(a, b, c)가 입력되었을 때, 짝(even)/홀(odd)을 출력해보자.

 

▷ 참고

if 조건식 :  #조건식을 평가해서...
  실행1      #True 인 경우 실행시킬 명령들...
  실행2
else :        
  실행3      #False 인 경우 실행시킬 명령들...
  실행4
실행5       #조건식과 상관없는 다음 명령

 

else 는 if 없이 혼자 사용되지 않는다.
또한, else 다음에는 조건식이 없는 이유는? True(참)가 아니면 False(거짓)이기 때문에... 
조건식의 평가 결과는 True 아니면 False 로 계산되기 때문이다.

 

▷ 해설

문제는 3개의 조건문을 이용해 풀어야 한다.

입력 된 세 값을 각자 홀수 인지 짝수 인지 구하는 문제로 n%2 == 0은 짝이고 n%2 == 1은 홀이다. 

모두 홀이나 짝 두가지 경우가 나오므로 if문으로 표현할때 else를 이용하면 그 외의 경우를 표현가능하다.

 

밑의 풀이법은 if문을 다양하게 사용해본 결과물이다. 세가지 방법으로 똑같은 문제를 해결가능하다.

elif는 else if로 if의 조건외에 다른 조건을 걸기 위해 사용되는 문법이다. 

a, b, c = input().split()

a = int(a)
b = int(b)
c = int(c)

# a가 짝인 경우만 even이 출력되고 그외의 경우 odd가 출력 
if a % 2 == 0:
	print("even")
else:
	print("odd")


# b가 홀인 경우만 odd가 출력되고 그 외의 경우 even이 출력
if b % 2 == 1:
	print("odd")
else:
	print("even")
    
# c가 짝인 경우 even이 출력되고 홀인 경우 odd가 출력
if c % 2 == 0:
	print("even")
elif c % 2 == 1:
	print("odd")

 

6067 : [기초-조건/선택실행구조] 정수 1개 입력받아 분류하기(설명)(py)

0이 아닌 정수 1개가 입력되었을 때, 음(-)/양(+)과 짝(even)/홀(odd)을 구분해 분류해보자.
음수이면서 짝수이면, A
음수이면서 홀수이면, B
양수이면서 짝수이면, C
양수이면서 홀수이면, D
를 출력한다.

 

▷ 참고

조건/선택 실행구조 안에 다시 조건/선택 실행구조를 "중첩"할 수가 있다.

또한, 중첩된 조건은

 

if (n<0) and (n%2==0) :
    print('A')

 

와 같이 논리연산자(not, and, or)를 이용해 합쳐 표현할 수도 있다.
비교연산(<, >, <=, >=, ==, !=) 의 계산 결과는 True 또는 False 의 불(boolean) 값이고,
불 값들 사이의 논리연산(not, and, or)의 결과도 True 또는 False 의 불 값이다.

 

▷ 해설

두 가지 풀이법이 있다.

첫번째 방법은 if ~ else만을 가지고 문제를 해결하는 방법이다. 처음엔 음과 양을 나눈 뒤 이후 홀 수 인지 짝수인지 나누게 된다.

두번째 방법은 if ~ else와 추가적으로 논리연산자를 같이 사용하면된다 총 4가지의 결과에 대한 모든 조건을 표현가능하다.

n = int(input())

if n < 0:
    if n % 2 == 0:
    	# 음수이면서 짝수
        print('A')
    else:
    	# 음수이면서 홀수
        print('B')
else:
    if n % 2 == 0:
    	# 양수이면서 짝수
        print('C')
    else:
    	# 양수이면서 홀수
        print('D')
n = int(input())

if (n % 2 == 0) and n < 0:
	# 음수이면서 짝수
	print('A')
elif (n % 2 == 1) and n < 0:
	# 음수이면서 홀수
    print('B')
elif (n % 2 == 0) and n > 0:
	# 양수이면서 짝수
    print('C')
else:
	# 그 외의 경우 = 양수이면서 홀수
	print('D')

 

6068 : [기초-조건/선택실행구조] 점수 입력받아 평가 출력하기(설명)(py)

점수(정수, 0 ~ 100)를 입력받아 평가를 출력해보자.

평가 기준
점수 범위 : 평가
 90 ~ 100 : A
 70 ~   89 : B
 40 ~   69 : C
   0 ~   39 : D
로 평가되어야 한다.

 

▷ 참고

여러 조건들을 순서대로 비교하면서 처리하기 위해서 조건문을 여러 번 중첩할 수 있다.

if 조건식1 :
  ...
else :
  if 조건식2 :
    ...
  else :
    if 조건식3 :
      ...
    else :

      ...

...
와 같이 조건/선택 실행 구조를 겹쳐 작성하면 순서대로 조건을 검사할 수 있다.
어떤 조건이 참이면 그 부분의 내용을 실행하고 전체 조건/선택 구조를 빠져나가게 된다.

if 조건식1 : 
  ... 
elif 조건식2 : 
  ... 
elif 조건식3 : 
  ... 
else : 
  ...
도 똑같은 기능을 한다. elif는 else if 의 짧은 약어라고 생각해도 된다.
elif 를 사용하면 if ... else ... 구조를 겹쳐 사용할 때처럼, 여러 번 안 쪽으로 들여쓰기 하지 않아도 된다.

 

▷ 해설

성적과 같이 특정 범위를 위해 나누는 조건은 대부분 elif로 처리한다.

elif를 사용하면 들여쓰기가 없어지며 코드가 더 알아보기 쉬워져서 자주 사용한다.

n = int(input())

if n >= 90:
	print('A')
elif n >= 70:
	print('B')
elif n >= 40:
	print('C')
else:
	print('D')

 

6069 : [기초-조건/선택실행구조] 평가 입력받아 다르게 출력하기(py)

평가를 문자(A, B, C, D, ...)로 입력받아 내용을 다르게 출력해보자.

평가 내용
평가 : 내용
A : best!!!
B : good!!
C : run!
D : slowly~
나머지 문자들 : what?

 

▷ 해설

한 문자를 입력 받으면 A, B, C, D의 경우 해당 문자가 출력되고 그외에는 what?을 출력하면 된다.  

c = input()

if c == 'A':
	print('best!!!')
elif c == 'B':
	print('good!!')
elif c == 'C':
	print('run!')
elif c == 'D':
	print('slowly~')
else:
	print('what?')

 

6070 : [기초-조건/선택실행구조] 월 입력받아 계절 출력하기(설명)(py)

월이 입력될 때 계절 이름이 출력되도록 해보자.

월 : 계절 이름
12, 1, 2 : winter
  3, 4, 5 : spring
  6, 7, 8 : summer
  9, 10, 11 : fall

 

▷ 참고

때때로 수들의 특징을 관찰하고 이용하면 매우 간단히 해결할 수도 있다.

 

▷ 해설

사계절은 세달마다 바뀌기 때문에 3이 이번 문제의 포인트이다.

spring을 3으로 나누면 몫으로 1이 나오게 된다.

summer는 3으로 나누면 몫이 2, fall은 몫이 3으로 나온다.다음 특성이 유일하게 통하지 않는게 winter이므로 winter을 예외에 두면 된다.

 

그외에도 이 문제를 푸는 방법은 범위를 이용해 푸는 방법(spring은 3보다 같거나 크고 6보다 작다 ... )도 있고비교연산자와 관계연산자를 이용해 푸는 방법(spring은 3 또는 4 또는 5여야 한다)등 다양하다.

m = int(input())

if m // 3 == 1:
	print('spring')
elif m // 3 == 2:
	print('summer')
elif m // 3 == 3:
	print('fall')
else:
	print('winter')
m = int(input())

if m >= 3 and m < 6:
	print('spring')
elif m >= 6 and m < 9:
	print('summer')
elif m >= 9 and m < 12:
	print('fall')
else:
	print('winter')
m = int(input())

if m == 3 or m == 4 or m == 5:
	print('spring')
elif m == 6 or m == 7 or m == 8:
	print('summer')
elif m == 9 or m == 10 or m == 11:
	print('fall')
else:
	print('winter')

알고리즘 공부를 위해 코드업 사이트(https://codeup.kr/)의 기초 100제를 시작합니다.

블로그에 올라온 모든 코드는 파이썬(Python)으로 작성되어 있습니다.   

 

Python의 기초 100제를 확인하기 위해서는 다음 사이트로 이동하면 됩니다. 

https://codeup.kr/problemsetsol.php?psid=33 

 

문제집 / Python 기초 100제

 

codeup.kr

 

6061 : [기초-비트단위논리연산] 비트단위로 OR 하여 출력하기(설명)(py)

입력된 정수 두 개를 비트단위로 or 연산한 후 그 결과를 정수로 출력해보자.
비트단위(bitwise) 연산자 |(or, vertical bar, 버티컬바)를 사용하면 된다.

| 은 파이프(pipe)연산자라고도 불리는 경우가 있다.

비트단위(bitwise) 연산자는,
~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor),
<<(bitwise left shift), >>(bitwise right shift)가 있다.

 

▷ 참고

예를 들어 3과 5가 입력되었을 때를 살펴보면
3      : 00000000 00000000 00000000 00000011
5      : 00000000 00000000 00000000 00000101
3 | 5 : 00000000 00000000 00000000 00000111
이 된다.

비트단위 or 연산은 둘 중 하나라도 1인 자리를 1로 만들어주는 것과 같다.

이러한 비트단위 연산은 빠른 계산이 필요한 그래픽처리에서도 효과적으로 사용된다.

 

a, b = input().split()
print(int(a) | int(b))

 

6062 : [기초-비트단위논리연산] 비트단위로 XOR 하여 출력하기(설명)(py)

입력된 정수 두 개를 비트단위로 xor 연산한 후 그 결과를 정수로 출력해보자.
비트단위(bitwise) 연산자 ^(xor, circumflex/caret, 서컴플렉스/카릿)를 사용하면 된다.

^은 수학식에서 거듭제곱(power)을 나타내는 기호와 모양은 같지만,
C언어에서는 전혀 다른 배타적 논리합(xor, 서로 다를 때 1)의 의미를 가지므로 주의해야한다.

비트단위(bitwise) 연산자는,
~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor),
<<(bitwise left shift), >>(bitwise right shift)가 있다.

 

▷ 참고

예를 들어 3과 5가 입력되었을 때를 살펴보면
3       : 00000000 00000000 00000000 00000011
5       : 00000000 00000000 00000000 00000101
3 ^ 5 : 00000000 00000000 00000000 00000110
이 된다.
이러한 비트단위 연산은 빠른 계산이 필요한 그래픽처리에서도 효과적으로 사용된다.

구체적으로 설명하자면,
두 장의 이미지가 겹쳐졌을 때 색이 서로 다른 부분만 처리할 수 있다.
배경이 되는 그림과 배경 위에서 움직이는 그림이 있을 때,
두 그림에서 차이만 골라내 배경 위에서 움직이는 그림의 색으로 바꿔주면
전체 그림을 구성하는 모든 점들의 색을 다시 계산해 입히지 않고
보다 효과적으로 그림을 처리할 수 있게 되는 것이다.
비행기 슈팅게임 등을 상상해보면 된다.

a, b = input().split()
print(int(a) ^ int(b))

 

6063 : [기초-3항연산] 정수 2개 입력받아 큰 값 출력하기(설명)(py)

입력된 두 정수(a, b) 중 큰 값을 출력하는 프로그램을 작성해보자.
단, 3항 연산을 사용한다.

 

▷ 참고

3개의 요소로 이루어지는 3항 연산은
"x if C else y" 의 형태로 작성이 된다.
- C : True 또는 False 를 평가할 조건식(conditional expression) 또는 값
- x : C의 평가 결과가 True 일 때 사용할 값
- y : C의 평가 결과가 True 가 아닐 때 사용할 값

조건식 또는 값이 True 이면 x 값이 사용되고, True가 아니면 y 값이 사용되도록 하는 코드이다.

예를 들어
0 if 123>456 else 1
과 같은 표현식의 평가값은 123 > 456 의 비교연산 결과가 False 이므로 1이 된다.

예시 코드에서
a>=b 의 결과가 True(참) 이면 (a if (a>=b) else b)의 결과는 a가 되고,
a>=b 의 결과가 False(거짓)이면 (a if (a>=b) else b)의 결과는 b가 된다.

 

▷ 해설

3항 연산을 너무 어렵게 받아 들이지 말고 if문 앞의 값은 조건이 맞을 경우 나오고 else 뒤의 값은 조건이 틀리면 나오는 값으로 이해한다.

이번 문제에서는 a와 b중 큰 값을 구하려 했으니 조건인 a가 b보다 크다면에 만족하면 a를 출력하고 그외에는 b를 출력한다.

a, b = input().split()

a = int(a)
b = int(b)

print(a if (a >= b) else b)

 

6064 : [기초-3항연산] 정수 3개 입력받아 가장 작은 값 출력하기(설명)(py)

입력된 세 정수 a, b, c 중 가장 작은 값을 출력하는 프로그램을 작성해보자.
단, 3항 연산을 사용한다.

 

▷ 참고

프로그래밍언어 소스코드 작성시 모든 요소들은
"순서에 따라 한 단계씩 실행"
"미리 정해진 순서에 따라 하나씩 연산 수행"
"그 때까지 연산된 결과를 이용해 다시 순서에 따라 하나씩 연산"
...
등의 원리가 적용된다.

따라서 3항 연산을 중첩해(괄호로 묶는 등..) 이용하면 여러 값들을 순서대로 비교해 가장 큰/작은 값을 계산할 수 있다.

예를 들어
(a if a>b else b) if ((a if a>b else b)>c) else c
와 같은 계산식은 a, b, c 의 값 중 가장 큰 값으로 계산된다.

잘 이해가 되지 않는다면 어떤 순서에 따라 계산될 지 생각해보고
여러 가지 연산자가 동시에 사용된 식이 있을 때, 어떤 우선순위에 따라 순서대로 계산이 되는지 찾아보도록 한다.
“연산자 우선순위”를 검색하면 우선순위와 결합방향이 나온다.
예를 들어 변수에 어떤 값을 대입하는 대입(assign) 연산자 = 의 우선순위는 가장 낮고, 오른쪽에서 왼쪽의 결합방향을 가진다.

3항 연산은 자주 사용되지는 않지만,
복잡한 계산식이나 조건 처리, 비교 구조를 간단히 표현할 수 있게 해준다.

 

▷ 해설

세값을 3항 연산으로 비교하기 위해서는 두개의 삼항 연산자가 필요하다.

 

a if (a<b) else b)

첫번째 삼항연산자에서는

두 값 a와 b에 대해서만 크기를 비교한다. a가 b보다 작을 경우 a가 되며 b가 a보다 작을 경우 b가 된다.

 

'첫번째 삼항연산자' if ('첫번째 삼항연산자'< c) else c

두번째 삼항연산자에서는 첫번째 삼항연산자를 둘 중 작은 값을 가진 하나의 수로 보고 식을 전개해야한다.

첫번째 삼항연산자가 c보다 작을 경우 첫번째 삼항연산자의 값이 가장 작은 값이 되며 그 반대의 경우 c가 두 수중 작은 값보다도 작다는 것을 통해 가장 작은값이 될 수 있다.  

a, b, c = input().split()

a = int(a)
b = int(b)
c = int(c)

print((a if (a<b) else b) if (( a if (a<b) else b) < c) else c)

 

6065 : [기초-조건/선택실행구조] 정수 3개 입력받아 짝수만 출력하기(설명)(py)

3개의 정수(a, b, c)가 입력되었을 때, 짝수만 출력해보자.

 

▷ 참고

if 조건식 :
  실행1  #조건식의 평가값이 True 인 경우 실행시킬 명령을 들여쓰기를 이용해 순서대로 작성한다.
  실행2
실행3  #들여쓰기를 하지 않은 부분은 조건식에 상관이 없음 

python 에서는 논리적 실행단위인 코드블록(code block)을 표현하기 위해 들여쓰기를 사용한다.
들여쓰기 방법은 탭(tab), 공백(space) 4개 등 여러 가지 방법을 사용할 수 있지만
한 소스코드 내에서 들여쓰기 길이와 방법은 똑같아야 한다.

a%2==0 은 (a%2)가 먼저 계산된 후 그 결과를 정수 0과 비교한 결과값이다.
a를 2로 나눈 나머지가 0, 즉 짝수이면 True 가 되고, 아니면 False 로 계산된다.
따라서,
if a%2==0 : #a가 짝수라면 ... 
와 같은 의미가 된다. 짝수가 아니라면 들여쓰기로 작성된 부분들은 실행되지 않는다.

 

▷ 해설

문제에서 원하는 짝수를 구하기 위해서는 조건문(if문)을 이용한 판별이 필요하다.

짝수는 2로 나눠지는 값이므로 2로 나눈 나머지가 0이 된다는 특징을 이용하여 n%2 == 0 이면 짝수가 된다는걸 우리는 알 수 있다.

이걸 각 수에 적용하기 위해 3개의 조건문을 통해 입력된 모든 수가 짝수인지 일일이 확인한다.

a, b, c = input().split()

a = int(a)
b = int(b)
c = int(c)

if a % 2 == 0:
	print(a)
   
if b % 2 == 0:
	print(b)
   
if c % 2 == 0:
	print(c)

+ Recent posts