6071. 임의의 정수가 줄을 바꿔 계속 입력된다. -2147483648 ~ +2147483647, 단 개수는 알 수 없다.
0이 아니면 입력된 정수를 출력하고, 0이 입력되면 출력을 중단해보자.
예시 ... n = 1 #처음 조건 검사를 통과하기 위해 0 아닌 값을 임의로 저장 while n!=0 : n = int(input()) if n!=0 : print(n) ...
참고 if 조건식 : ... ...
구조를 사용하면, 주어진 조건식의 평가 결과가 True 인 경우에만, 들여쓰기로 구분된 코드블록이 실행된다.
if 를 while 로 바꾸면?
while 조건식 : ... ...
와 같은 방법으로 반복해서 실행시킬 수 있다.
실행되는 과정은 1. 조건식을 평가한다. 2. True 인 경우 코드블록을 실행한다. 3. 다시 조건식을 평가한다. 4. True 인 경우 코드블록을 실행한다. ... ... 조건식의 평가 값이 False 인 경우 반복을 중단하고, 그 다음 명령을 실행한다.
조건식의 평가 결과가 True 동안만 반복 실행된다.
반복실행구조 안에 다른 조건/선택실행구조를 넣을 수도 있고... 조건/선택실행구조 안에 다른 반복실행구조를 넣을 수도 있다.
while True:
a = int(input())
if a == 0:
break
else:
print(a)
6072. 정수(1 ~ 100) 1개가 입력되었을 때 카운트다운을 출력해보자.
while 조건식 : ... ... 반복 실행구조를 사용해 보자.
예시 ... while n!=0 : print(n) n = n-1 ...
참고 n = n-1 #n에 저장되어있던 값에서 1만큼 뺀 후, 그 값을 다시 n에 저장시킨다. n -= 1 과 같이 짧게 작성할 수도 있다. n -= 1 은 n = n-1 과 같은 의미이다. 이렇게 산술연산자(+, -, *, / ... )와 대입 연산자(=)를 함께 쓰는 것을 복합대입연산자라고도 부른다. 같은 방법으로 +=, *=, /=, //=, %=, &=, |=, ^=, >>=, <<=, **= 등과 같이 짧게 작성할 수 있다.
처음에 조건식을 검사하고, 그 다음에 실행하고, 그 다음에 값을 바꾸고... 다시 조건식을 검사하고, 실행하고, 값을 바꾸고...
a = int(input())
while True:
print(a)
a = a - 1
if (a == 0):
break
6073. 정수(1 ~ 100) 1개가 입력되었을 때 카운트다운을 출력해보자.
while 조건식 : ... ...
반복 실행구조를 사용해 보자.
참고 조건검사, 출력, 감소의 순서와 타이밍을 잘 생각해보자.
a = int(input())
while True:
a = a - 1
print(a)
if(a == 0):
break
6074. 영문 소문자(a ~ z) 1개가 입력되었을 때, a부터 그 문자까지의 알파벳을 순서대로 출력해보자.
예시 c = ord(input()) t = ord('a') while t<=c : print(chr(t), end=' ') t += 1
참고 알파벳 문자 a의 정수값은 ord('a')로 알아낼 수 있다. chr(정수값)을 이용하면 유니코드 문자로 출력할 수 있다. print(..., end=' ') 와 같이 작성하면 값 출력 후 공백문자 ' '를 출력한다. 즉, 마지막에 줄을 바꾸지 않고 빈칸만 띄운다. (end='\n'로 작성하거나 생략하면, 값을 출력한 후 마지막(end)에 줄바꿈(newline)이 된다.)
a = ord(input())
for i in range(97, a+1):
print(chr(i), end=' ')
ord() 함수 - 문자를 아스키 코드 값으로 변환
chr() 함수 - 아스키 코드 값을 문자로 변환
print(chr(i), end=' ') -> end = ' ' 를 통해 공백을 두고 한 줄로 출력이 가능
6075. 정수(0 ~ 100) 1개를 입력받아 0부터 그 수까지 순서대로 출력해보자.
a = int(input())
i = 0
while a >= 0:
print(i)
i += 1
a -= 1
a = int(input())
for i in range(0, a+1):
print(i)
6076. 정수(0 ~ 100) 1개를 입력받아 0부터 그 수까지 순서대로 출력해보자.
예시 n = int(input()) for i in range(n+1) : print(i)
참고 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 ... 알파벳 순으로 사용하기도 한다.
if a%2==0 : #논리적으로 한 단위로 처리해야하는 경우 콜론(:)을 찍고, 들여쓰기로 작성 한다. print(a)
if b%2==0 : print(b)
if c%2==0 : print(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가 짝수라면 ... 와 같은 의미가 된다. 짝수가 아니라면 들여쓰기로 작성된 부분들은 실행되지 않는다.
a, b, c = map(int, input().split())
if a % 2 == 0 :
print(a)
if b % 2 == 0 :
print(b)
if c % 2 == 0 :
print(c)
a, b, c = map(int, input().split())
print( *filter(lambda num: not num%2, [a, b, c]))
6066. 3개의 정수(a, b, c)가 입력되었을 때, 짝(even)/홀(odd)을 출력해보자.
예시 ... if a%2==0 : print("even") else : print("odd") ...
참고 if 조건식 : #조건식을 평가해서... 실행1 #True 인 경우 실행시킬 명령들... 실행2 else : 실행3 #False 인 경우 실행시킬 명령들... 실행4 실행5 #조건식과 상관없는 다음 명령 ...
else 는 if 없이 혼자 사용되지 않는다. 또한, else 다음에는 조건식이 없는 이유는? True(참)가 아니면 False(거짓)이기 때문에... 조건식의 평가 결과는 True 아니면 False 로 계산되기 때문이다.
python에서는 들여쓰기를 기준으로 코드블록을 구분하므로, 들여쓰기를 정확하게 해주어야 한다.
a, b, c = map(int, input().split())
if a % 2 == 0:
print("even")
else:
print("odd")
if b % 2 == 0:
print("even")
else:
print("odd")
if c % 2 == 0:
print("even")
else:
print("odd")
a, b, c = map(int, input().split())
print('odd' if a%2 else 'even')
print(b%2 and 'odd or 'even')
print( ['even', 'odd'][c%2] )
a, b, c = map(int, input().split())
print( *map(lambda num: 'odd' if num%2 else 'even', [a, b, c]) )
6067. 0이 아닌 정수 1개가 입력되었을 때, 음(-)/양(+)과 짝(even)/홀(odd)을 구분해 분류해보자. 음수이면서 짝수이면, A 음수이면서 홀수이면, B 양수이면서 짝수이면, C 양수이면서 홀수이면, D 를 출력한다.
예시 ... if n<0 : if n%2==0 : print('A') #주의 : 변수 A와 문자열 'A' / "A" 는 의미가 완전히 다르다. else : print('B') else : if n%2==0 : print('C') else : print('D') ...
참고 조건/선택 실행구조 안에 다시 조건/선택 실행구조를 "중첩"할 수가 있다.
또한, 중첩된 조건은 ... if (n<0) and (n%2==0) : print('A')
...
와 같이 논리연산자(not, and, or)를 이용해 합쳐 표현할 수도 있다. 비교연산(<, >, <=, >=, ==, !=) 의 계산 결과는 True 또는 False 의 불(boolean) 값이고, 불 값들 사이의 논리연산(not, and, or)의 결과도 True 또는 False 의 불 값이다.
a = int(input())
if a < 0:
if(a % 2 == 0):
print('A')
else:
print('B')
else:
if(a % 2 == 0):
print('C')
else:
print('D')
6068. 점수(정수, 0 ~ 100)를 입력받아 평가를 출력해보자.
평가 기준 점수 범위 : 평가 90 ~ 100 : A 70 ~ 89 : B 40 ~ 69 : C 0 ~ 39 : D 로 평가되어야 한다.
예시 ... if n>=90 : print('A') else : if n>=70 : print('B') else : if n>=40 : print('C') else : print('D') ...
참고 여러 조건들을 순서대로 비교하면서 처리하기 위해서 조건문을 여러 번 중첩할 수 있다.
if 조건식1 : ... else : if 조건식2 : ... else : if 조건식3 : ... else :
...
... 와 같이 조건/선택 실행 구조를 겹쳐 작성하면 순서대로 조건을 검사할 수 있다. 어떤 조건이 참이면 그 부분의 내용을 실행하고 전체 조건/선택 구조를 빠져나가게 된다.
if 조건식1 : ... elif 조건식2 : ... elif 조건식3 : ... else : ... 도 똑같은 기능을 한다. elif는 else if 의 짧은 약어라고 생각해도 된다. elif 를 사용하면 if ... else ... 구조를 겹쳐 사용할 때처럼, 여러 번 안 쪽으로 들여쓰기 하지 않아도 된다.
a = int(input())
if a >=90:
print('A')
else:
if a>=70:
print('B')
else:
if a>=40:
print('C')
else:
print('D')
6069. 평가를 문자(A, B, C, D, ...)로 입력받아 내용을 다르게 출력해보자.
평가 내용 평가 : 내용 A : best!!! B : good!! C : run! D : slowly~ 나머지 문자들 : what?
a = input()
if a == 'A':
print('best!!!')
elif a == 'B':
print('good!!')
elif a == 'C':
print('run!')
elif a == 'D':
print('slowly~')
else:
print('what?')
6070. 월이 입력될 때 계절 이름이 출력되도록 해보자.
월 : 계절 이름 12, 1, 2 : winter 3, 4, 5 : spring 6, 7, 8 : summer 9, 10, 11 : fall
예시 ... if n//3==1 : print("spring") ...
참고 때때로 수들의 특징을 관찰하고 이용하면 매우 간단히 해결할 수도 있다.
a = int(input())
if a == 12 or a == 1 or a == 2:
print('winter')
elif a == 3 or a == 4 or a == 5:
print('spring')
elif a == 6 or a == 7 or a == 8:
print('summer')
else:
print('fall')
a = int(input())
if a in [12, 1, 2]:
print('winter')
elif a in [3, 4, 5]:
print('spring')
elif a in [6, 7, 8]:
print('summer')
else:
print('fall')
a = int(input())
if a//3==1:
print('winter')
elif a//3==2:
print('spring')
elif a//3==3:
print('summer')
else:
print('fall')
6063. 입력된 두 정수(a, b) 중 큰 값을 출력하는 프로그램을 작성해보자. 단, 3항 연산을 사용한다.
예시 a, b = input().split() a = int(a) #변수 a에 저장되어있는 값을 정수로 바꾸어 다시 변수 a에 저장 b = int(b) c = (a if (a>=b) else b) print(int(c))
참고 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가 된다.
a, b = map(int, input().split())
print(a>b and a or b)
6064. 입력된 세 정수 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항 연산은 자주 사용되지는 않지만, 복잡한 계산식이나 조건 처리, 비교 구조를 간단히 표현할 수 있게 해준다.
a, b, c = map(int, input().split())
d = a < b and a or b
print(d < c and d or c)
a, b, c = map(int, input().split())
num = a if a < b else b
print( num if num < c else c)
a, b = input().split()
print(bool(int(a)) or bool(int(b)))
6052. 정수가 입력되었을 때, True/False 로 평가해주는 프로그램을 작성해보자.
예시 n = int(input()) print(bool(n))
참고 bool( ) 을 이용하면 입력된 식이나 값을 평가해 불 형의 값(True 또는 False)을 출력해준다. 식이나 값을 계산해서 결과값이 만들어지는 것을 평가(evaluate)라고 한다.
python언어에서 정수값 0은 False(거짓)로 평가되고, 그 외의 값들은 모두 True(참)로 평가된다. ** 불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로 True(참)/False(거짓) 값만 가지는 논리값과 그 값들 사이의 연산을 다룬다.
a = int(input())
print(bool(a))
6053. 정수값이 입력될 때, 그 불 값을 반대로 출력하는 프로그램을 작성해보자.
예시 a = bool(int(input())) print(not a)
참고 a = bool(int(input())) 와 같은 형태로 겹쳐 작성하면, 한 번에 한 단계씩 계산/처리/평가된다. 위와 같은 명령문의 경우 input( ), int( ), bool( ) 순서로 한 번에 한 단계씩 계산/처리/평가된다.
어떤 불 값이나 변수에 not True, not False, not a 와 같은 계산이 가능하다.
참 또는 거짓의 논리값을 역(반대)으로 바꾸기 위해서 not 예약어(reserved word, keyword)를 사용할 수 있다.
이러한 논리연산을 NOT 연산(boolean NOT)이라고도 부르고, 프라임 '(문자 오른쪽 위에 작은 따옴표), 바(기호 위에 가로 막대), 문자 오른쪽 위에c(여집합, complement) 등으로 표시한다. 모두 같은 의미이다.
참, 거짓의 논리값 인 불(boolean) 값을 다루어주는 예약어는 not, and, or 이 있고, 불 값들 사이의 논리(not, and, or) 연산 결과도 마찬가지로 True 또는 False 의 불 값으로 계산 된다.
정수값 0은 False 이고, 나머지 정수 값들은 True 로 평가된다. 빈 문자열 "" 나 ''는 False 이고, 나머지 문자열들은 True 로 평가된다.
** 불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로 True(참)/False(거짓) 값만 가지는 논리값과 그 값들 사이의 연산을 다룬다.
a = bool(int(input()))
print(not a)
6054. 2개의 정수값이 입력될 때, 그 불 값이 모두 True 일 때에만 True 를 출력하는 프로그램을 작성해보자.
예시 a, b = input().split() print(bool(int(a)) and bool(int(b)))
참고 and 예약어는 주어진 두 불 값이 모두 True 일 때에만 True 로 계산하고, 나머지 경우는 False 로 계산한다. 이러한 논리연산을 AND 연산(boolean AND)이라고도 부르고, · 으로 표시하거나 생략하며, 집합 기호 ∩(교집합, intersection)로 표시하기도 한다. 모두 같은 의미이다.
참, 거짓의 논리값 인 불(boolean) 값을 다루어주는 예약어는 not, and, or 이 있고, 불 값들 사이의 논리(not, and, or) 연산 결과도 마찬가지로 True 또는 False 의 불 값으로 계산된다.
** 불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로 True(참)/False(거짓) 값만 가지는 논리값과 그 값들 사이의 연산을 다룬다.
a, b = input().split()
print(bool(int(a)) and bool(int(b)))
6055. 2개의 정수값이 입력될 때, 그 불 값이 하나라도 True 일 때에만 True 를 출력하는 프로그램을 작성해보자.
참고 or 예약어는 주어진 두 불 값 중에서 하나라도 True 이면 True 로 계산하고, 나머지 경우는 False 로 계산한다. 이러한 논리연산을 OR 연산(boolean OR)이라고도 부르고, + 로 표시하거나, 집합 기호 ∪(합집합, union)로 표시하기도 한다. 모두 같은 의미이다.
참, 거짓의 논리값 인 불(boolean) 값을 다루어주는 예약어는 not, and, or 이 있고, 불 값들 사이의 논리(not, and, or) 연산 결과도 마찬가지로 True 또는 False 의 불 값으로 계산된다.
** 불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로 True(참)/False(거짓) 값만 가지는 논리값과 그 값들 사이의 연산을 다룬다.
a, b = input().split()
print(bool(int(a)) or bool(int(b)))
6056. 2개의 정수값이 입력될 때, 그 불 값(True/False) 이 서로 다를 때에만 True 를 출력하는 프로그램을 작성해보자.
예시 ... c = bool(int(a)) d = bool(int(b)) print((c and (not d)) or ((not c) and d))
참고 참 거짓이 서로 다를 때에만 True 로 계산하는 논리연산을 XOR(exclusive or, 배타적 논리합) 연산이라고도 부른다.
논리연산자는 사칙(+, -, *, /) 연산자와 마찬가지로 여러 번 중복해서 사용할 수 있는데, 사칙 연산자와 마찬가지로 계산 순서를 표시하기 위해 괄호 ( )를 사용할 수 있다. 괄호를 사용하면 계산 순서를 명확하게 표현할 수 있다.
수학 식에서는 소괄호 (), 중괄호 {}, 대괄호 []를 사용하기도 하지만, 프로그래밍언어에서는 소괄호 ( ) 만 사용한다.
** 불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로 True(참)/False(거짓) 값만 가지는 논리값과 그 값들 사이의 연산을 다룬다.
a, b = input().split()
a = bool(int(a))
b = bool(int(b))
print(a and (not b) or (not a) and b)
6057. 2개의 정수값이 입력될 때, 그 불 값(True/False) 이 서로 같을 때에만 True 를 출력하는 프로그램을 작성해보자.
a, b = input().split()
a = bool(int(a))
b = bool(int(b))
print(not(a) and not(b) or a and b)
6058. 2개의 정수값이 입력될 때, 그 불 값(True/False) 이 모두 False 일 때에만 True 를 출력하는 프로그램을 작성해보자.
a, b = input().split()
a = bool(int(a))
b = bool(int(b))
print((not a) and (not b))
# 가운데 글자 가져오기
def solution(s):
# 글자의 길이
s_length = len(s)
# 글자의 길이가 홀수인 경우 가운데 글자를 뽑아내기
if s_length % 2 == 1:
answer = s[s_length // 2]
# 글자의 길이가 짝수인 경우 가운데 두 글자를 뽑아내기
if s_length % 2 == 0:
answer = s[(s_length // 2) - 1:(s_length // 2) + 1]
return answer
def solution(s):
if len(s) % 2 == 1:
return 가운데 값
#s의 길이를 2로 나눈 나머지가 1이면 = 홀수면
"""
!POINT!
여기서 == 1은 쓰지 않아도 된다!
왜? 조건문에서는 '기냐 아니냐'를 보기 때문에,
%를 2로 나눴기 때문에 0과 1의 값만 나오는 상황에서
숫자값 0은 False, 1은 True가 된다.
"""
#나머지가 1이 아니면 = 짝수면
else:
return 가운데 값에서 +1, -1 값
나누기 연산자 //
def solution(s):
if len(s) % 2 == 1:
return s[len(s)//2]
#s의 리스트 s[]를 만들고 = 해당 인덱스의 '값'을 출력하기 위해
#len(s)//2한 인덱스의 값을 반환
else:
return 가운데 값에서 +_1 값
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
long long solution(int a, int b) {
long long answer = 0;
long long sum = 0;
if ( a > b ){
for ( int i = b; i < a+1; i++)
answer += i;
}
else if ( a < b ) {
for ( int i = a; i < b+1; i++)
answer += i;
}
else {
answer = a;
}
return answer;
}
# 정수 x, 자연수 n이 매개변수로 주어짐
def solution(x, n):
# 정답을 저장할 List 변수를 선언
# n개의 None으로 초기화
answer = [None] * n
# 0부터 n-1까지 반복
for i in range(n):
# answer의 현재 index에 x * (i + 1) 값을 저장
answer[i] = x * (i + 1)
# answer의 값을 반환
return answer