6086. 1, 2, 3 ... 을 순서대로 계속 더해 합을 만드는데,
그 합이 입력한 정수보다 작을 동안만 계속 더하는 프로그램을 작성해보자.

즉, 1부터 n까지 정수를 하나씩 더해 합을 만드는데,
어디까지 더해야 입력한 수보다 같거나 커지는지 알아보고자 하는 문제이다.

하지만, 이번에는 그 때 까지의 합을 출력해야 한다.

예를 들어, 57을 입력하면
1+2+3+...+8+9+10=55에서 그 다음 수인 11을 더해 66이 될 때,
그 값 66이 출력되어야 한다.

예시
...
while True :
  s += c
  c += 1
  if s>=n :
    break

print(s)

참고
조건문이나 반복문의 코드블록 안에서 break 가 실행되면,
반복실행을 중단(break)하고, 가장 가까운 반복 블록의 밖으로 빠져나간다.

a = int(input())
s = 0
c = 0

while True:
  s = s + c
  c = c + 1
  if s >= a:
    break

print(s)

 

6087. 1부터 입력한 정수까지 1씩 증가시켜 출력하는 프로그램을 작성하되,
3의 배수인 경우는 출력하지 않도록 만들어보자.

예를 들면,
1 2 4 5 7 8 10 11 13 14 ...
와 같이 출력하는 것이다.

예시
...
for i in range(1, n+1) :
  if i%2==0 :
    continue            #다음 반복 단계로 넘어간다.
  print(i, end=' ')    #i가 짝수가 아닐 때만 실행된다.
...
위 코드는 홀 수만 출력하는 예시이다.

참고
조건문이나 반복문의 코드블록 안에서 continue 가 실행되면,
반복 블록 안에 있는 나머지 부분을 실행하지 않고, 다음 반복 단계로 넘어간다.
즉, 반복 블록의 나머지 부분은 실행되지 않고, 다음 단계의 반복을 계속(continue)하는 것이다.

a = int(input())

for i in range(1, a+1):
  if i % 3 == 0:
    continue        # 다음 반복 단계로 넘어감
  print(i, end=' ') # i가 짝수가 아닐 때만 실행

 

6088. 어떤 규칙에 따라 수를 순서대로 나열한 것을 수열(sequences)이라고 한다.

예를 들어
1 4 7 10 13 16 19 22 25 ... 은
1부터 시작해 이전에 만든 수에 3을 더해 다음 수를 만든 수열이다.
이러한 것을 수학에서는 앞뒤 수들의 차이가 같다고 하여

등차(차이가 같다의 한문 말) 수열이라고 한다. (등차수열 : arithmetic progression/sequence)
수열을 알게 된 영일이는 갑자기 궁금해졌다.

"그럼.... 123번째 나오는 수는 뭘까?"

영일이는 프로그램을 만들어 더 큰 수도 자동으로 계산하고 싶어졌다.

시작 값(a), 등차(d), 몇 번째인지를 나타내는 정수(n)가 입력될 때
n번째 수를 출력하는 프로그램을 만들어보자.

 

a, d, n = map(int, input().split())
print(a+(d*(n-1)))

항의 개수에서 -1 을 해준 뒤 곱을 해야 제대로 된 값이 나옴 ->초기값은 포함하면 안되기 때문

 

6089. 어떤 규칙에 따라 수를 순서대로 나열한 것을 수열(sequences)이라고 한다.

예를 들어
2 6 18 54 162 486 ... 은
2부터 시작해 이전에 만든 수에 3을 곱해 다음 수를 만든 수열이다.

이러한 것을 수학에서는 앞뒤 수들의 비율이 같다고 하여
등비(비율이 같다의 한문 말) 수열이라고 한다. (등비수열 : geometric progression/sequence)

등비 수열을 알게된 영일이는 갑자기 궁금해졌다.
"그럼.... 13번째 나오는 수는 뭘까?"
영일이는 프로그램을 만들어 더 큰 수도 자동으로 계산하고 싶어졌다.

시작 값(a), 등비(r), 몇 번째인지를 나타내는 정수(n)가 입력될 때
n번째 수를 출력하는 프로그램을 만들어보자.

a, d, n = map(int, input().split()) # 정수를 받는다. 1. 초기값, 2. 공비, 3. 항의 개수
count=1                             # count 변수 선언

while(count<n):                     
  a *= d                            # 항에 공비를 곱해준다.
  count+=1                          # 항에 공비를 곱할때마다 count가 올라간다.

print(a)                            # 마지막 값을 출력해준다.

 

6090. 어떤 규칙에 따라 수를 순서대로 나열한 것을 수열(sequences)이라고 한다.

예를 들어
1 -1 3 -5 11 -21 43 ... 은
1부터 시작해 이전에 만든 수에 -2를 곱한 다음 1을 더해 다음 수를 만든 수열이다.

이런 이상한 수열을 알게 된 영일이는 또 궁금해졌다.
"그럼.... 13번째 나오는 수는 뭘까?"

영일이는 물론 수학을 아주 잘하지만 이런 문제는 본 적이 거의 없었다...
그래서 프로그램을 만들어 더 큰 수도 자동으로 계산하고 싶어졌다.

시작 값(a), 곱할 값(m), 더할 값(d), 몇 번째인지를 나타내는 정수(n)가 입력될 때,
n번째 수를 출력하는 프로그램을 만들어보자.

a, m, d, n = map(int, input().split())    # 1.시작할 값, 2.곱할 값, 3. 더할값, 4. 항 개수
count = 1                                 # count 변수 선언
while(count<n):
  a=(a*m+d)                               # 연산 후 다음항으로 넘어가기
  count+=1                                # count 올리기
print(a)

 

6091. 온라인 채점시스템에는 초등학생, 중고등학생, 대학생, 대학원생,
일반인, 군인, 프로그래머, 탑코더 등 아주 많은 사람들이 들어와 문제를 풀고 있는데,

실시간 채점 정보는 메뉴의 채점기록(Judge Status)을 통해 살펴볼 수 있다.

자! 여기서...잠깐..
같은 날 동시에 가입한 3명의 사람들이 온라인 채점시스템에 들어와 문제를 푸는 날짜가
매우 규칙적이라고 할 때, 다시 모두 함께 문제를 풀게 되는 그날은 언제일까?

예를 들어 3명이 같은 날 가입/등업하고, 각각 3일마다, 7일마다, 9일마다
한 번씩 들어온다면, 처음 가입하고 63일 만에 다시 3명이 함께 문제를 풀게 된다.

갑자기 힌트?
왠지 어려워 보이지 않는가?
수학에서 배운 최소공배수를 생각한 사람들도 있을 것이다. 하지만, 정보에서 배우고 경험하는
정보과학의 세상은 때때로 컴퓨터의 힘을 빌려 간단한 방법으로 해결할 수 있게 한다.

아래의 코드를 읽고 이해한 후 도전해 보자.
day는 날 수, a/b/c는 방문 주기이다.
...
d = 1
while d%a!=0 or d%b!=0 or d%c!=0 :
  d += 1
print(d)
...

물론, 아주 많은 다양한 방법이 있을 수 있다.

정보과학의 문제해결에 있어서 정답은?
하나가 아니라 주어진 시간/기억공간으로 정확한 결과를 얻을 수 있는 모든 방법이다.

따라서, 모든 문제들에는 정답이 하나뿐만이 아니다.
새로운, 더 빠른, 더 간단한 방법을 다양하게 생각해보고 여러가지 방법으로 도전해 볼 수 있다.

h1, h2, h3 = map(int, input().split())
day = 1

while(day%h1 != 0 or day%h2 != 0 or day%h3 != 0): # 3명의 사람이 모두 해당되는 날을 찾음
  day += 1
print(day)

6081. 16진수 구구단 출력하기

16진수(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F)를 배운
영일이는 16진수끼리 곱하는 16진수 구구단?에 대해서 궁금해졌다.

A, B, C, D, E, F 중 하나가 입력될 때,
1부터 F까지 곱한 16진수 구구단의 내용을 출력해보자.
(단, A ~ F 까지만 입력된다.)

예시
...
  print('%X'%n, '*%X'%i, '=%X'%(n*i), sep='')
...

참고
print('%X'%n)    #n에 저장되어있는 값을 16진수(hexadecimal) 형태로 출력
작은 따옴표 2개를 사용해서 print(..., sep='') 으로 출력하면, 공백없이 모두 붙여 출력된다.
작은 따옴표 2개 '' 또는 큰 따옴표 2개 "" 는 아무 문자도 없는 빈문자열(empty string)을 의미한다.

a = input()

for i in range(1, 16):
  print( '%s*%s=%s' %(a, hex(i)[2:].upper(), hex(int(a, 16) *i )[2:].upper()))

 

6082. 3 6 9 게임의 왕이 되자


친구들과 함께 3 6 9 게임을 하던 영일이는 잦은 실수 때문에 계속해서 벌칙을 받게 되었다.
3 6 9 게임의 왕이 되기 위한 369 마스터 프로그램을 작성해 보자.

** 3 6 9 게임은?
여러 사람이 순서를 정한 후, 순서대로 수를 부르는 게임이다.
만약 3, 6, 9 가 들어간 수를 자신이 불러야 하는 상황이라면, 수를 부르는 대신 "박수(X)" 를 쳐야 한다.
33과 같이 3,6,9가 두 번 들어간 수 일때, "짝짝"과 같이 박수를 두 번 치는 형태도 있다. 

참고 
...
for i in range(1, n+1) :
  if i%10==3 :
    print("X", end=' ')    #출력 후 공백문자(빈칸, ' ')로 끝냄
...

a = int(input())

for i in range(1, a+1):
  if (i % 10 == 3 or i % 10 == 6 or i % 10 == 9):
    print('X', end= ' ')
    continue
    
  print(i, end= ' ')

 

6083. 빨강(red), 초록(green), 파랑(blue) 빛을 섞어 여러 가지 다른 색 빛을 만들어 내려고 한다.

빨강(r), 초록(g), 파랑(b) 각 빛의 가짓수가 주어질 때,
주어진 rgb 빛들을 섞어 만들 수 있는 모든 경우의 조합(r g b)과 만들 수 있는 색의 가짓 수를 계산해보자.  

**모니터, 스마트폰과 같은 디스플레이에서 각 픽셀의 색을 만들어내기 위해서 r, g, b 색을 조합할 수 있다.
**픽셀(pixel)은 그림(picture)을 구성하는 셀(cell)에서 이름이 만들어졌다.
 

r, g, b = input().split()

r = int(r)
g = int(g)
b = int(b)

for i in range(0, r):
  for j in range(0, g):
    for k in range(0, b):
      print(i, j, k)

print(r*g*b)

 

6084. 소리가 컴퓨터에 저장될 때에는 디지털 데이터화 되어 저장된다.

마이크를 통해 1초에 적게는 수십 번, 많게는 수만 번 소리의 강약을 체크하고,
한 번씩 체크할 때 마다 그 값을 정수값으로 바꾸어 저장하는 방식으로 소리를 파일로 저장할 수 있다.

값을 저장할 때에는 비트를 사용하는 정도에 따라 세세한 녹음 정도를 결정할 수 있고,
좌우(스테레오) 채널로 저장하면 2배… 5.1채널이면 6배의 저장공간이 필요하고,
녹음 시간이 길면 그 만큼 더 많은 저장공간이 필요하다.

1초 동안 마이크로 소리강약을 체크하는 횟수를 h
(헤르쯔, Hz 는 1초에 몇 번? 체크하는가를 의미한다.)

한 번 체크한 값을 저장할 때 사용하는 비트수를 b
(2비트를 사용하면 0 또는 1 두 가지, 16비트를 사용하면 65536가지..)

좌우 등 소리를 저장할 트랙 개수인 채널 개수를 c
(모노는 1개, 스테레오는 2개의 트랙으로 저장함을 의미한다.)

녹음할 시간(초) s가 주어질 때,

필요한 저장 용량을 계산하는 프로그램을 작성해보자.

실제로, 일반적인 CD 음질(44.1KHz, 16bit, 스테레오)로 1초 동안 저장하려면
44100 * 16 * 2 * 1 bit의 저장공간이 필요한데,
44100*16*2*1/8/1024/1024 로 계산하면 약 0.168 MB 정도가 필요하다.

이렇게 녹음하는 방식을 PCM(Pulse Code Modulation) 방법이라고 하는데,
압축하지 않은 순수한(raw) 소리 데이터 파일은 대표적으로 *.wav 가 있다.

**
      8 bit(비트)           = 1byte(바이트)       # 8bit=1Byte
1024 Byte(210 byte) = 1KB(킬로 바이트)  # 1024Byte=1KB
1024 KB(210 KB)      = 1MB(메가 바이트)
1024 MB(210 MB)     = 1GB(기가 바이트)
1024 GB(210 GB)      = 1TB(테라 바이트)

h, b, c, s = input().split()

h = int(h)
b = int(b)
c = int(c)
s = int(s)

print(round(h*b*c*s/8/1024/1024, 1), "MB")

 

6085. 이미지가 컴퓨터에 저장될 때에도 디지털 데이터화 되어 저장된다.

가장 기본적인 방법으로는 그림을 구성하는 한 점(pixel, 픽셀)의 색상을
빨강(r), 초록(g), 파랑(b)의 3가지의 빛의 세기 값으로 따로 변환하여 저장하는 것인데,

예를 들어 r, g, b 각 색에 대해서 8비트(0~255, 256가지 가능)씩을 사용한다고 하면,

한 점의 색상은 3가지 r, g, b의 8비트+8비트+8비트로 총 24비트로 표현해서
총 2^24 가지의 서로 다른 빛의 색깔을 사용할 수 있는 것이다.

그렇게 저장하는 점을 모아 하나의 큰 이미지를 저장할 수 있게 되는데,
1024 * 768 사이즈에 각 점에 대해 24비트로 저장하면 그 이미지를 저장하기 위한
저장 용량을 계산할 수 있다.

이렇게 이미지의 원래(raw) 데이터를 압축하지 않고 그대로 저장하는 대표적인 이미지 파일이
*.bmp 파일이며, 비트로 그림을 구성한다고 하여 비트맵 방식 또는 래스터 방식이라고 한다.

이미지의 가로 해상도 w, 세로 해상도 h, 한 픽셀을 저장하기 위한 비트 b 가 주어질 때,
압축하지 않고 저장하기 위해 필요한 저장 용량을 계산하는 프로그램을 작성해 보자.

예를 들어
일반적인 1024 * 768 사이즈(해상도)의 각점에 대해
24비트(rgb 각각 8비트씩 3개)로 저장하려면
1024 * 768 * 24 bit의 저장공간이 필요한데,
1024*768*24/8/1024/1024 로 계산하면 약 2.25 MB 정도가 필요하다.

실제 그런지 확인하고 싶다면, 간단한 그림 편집/수정 프로그램을 통해 확인할 수 있다.

**
      8 bit(비트)           = 1byte(바이트)     #       8bit=1Byte
1024 Byte(210 byte) = 1KB(킬로 바이트)  # 1024Byte=1KB
1024 KB(210 KB)      = 1MB(메가 바이트)
1024 MB(210 MB)     = 1GB(기가 바이트)
1024 GB(210 GB)      = 1TB(테라 바이트)

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

totalbit = a * b * c
totalbyte = totalbit / 8
totalkb = totalbyte / 1024
totalmb = totalkb / 1024

print("%0.2f MB" % totalmb)

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 ... 알파벳 순으로 사용하기도 한다.

a = int(input())
for i in range(a+1):
  print(i)

 

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

예시
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) 

참고 
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)

 

6059. 입력 된 정수를 비트단위로 참/거짓을 바꾼 후 정수로 출력해보자.
비트단위(bitwise)연산자 ~ 를 붙이면 된다.(~ : tilde, 틸드라고 읽는다.)

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

예를 들어 1이 입력되었을 때 저장되는 1을 32비트 2진수로 표현하면
        00000000 00000000 00000000 00000001 이고,
~1은 11111111 11111111 11111111 11111110 가 되는데 이는 -2를 의미한다.

예시
a = 1
print(~a) #-2가 출력된다.

참고
컴퓨터에 저장되는 모든 데이터들은 2진수 형태로 바뀌어 저장된다.
0과 1로만 구성되는 비트단위들로 변환되어 저장되는데,
양의 정수는 2진수 형태로 바뀌어 저장되고, 음의 정수는 "2의 보수 표현"방법으로 저장된다.

양의 정수 5를 32비트로 저장하면, 

5의 2진수 형태인 101이 32비트로 만들어져
00000000 00000000 00000000 00000101
로 저장된다.(공백은 보기 편하도록 임의로 분리)

32비트 형의 정수 0은
00000000 00000000 00000000 00000000

그리고 -1은 0에서 1을 더 빼고 32비트만 표시하는 형태로
11111111 11111111 11111111 11111111 로 저장된다.

-2는 -1에서 1을 더 빼면 된다.
11111111 11111111 11111111 11111110 로 저장된다.

이러한 내용을 간단히 표현하면, 정수 n이라고 할 때,

~n = -n - 1
-n = ~n + 1 과 같은 관계로 표현할 수 있다.

이 관계를 그림으로 그려보면 마치 원형으로 수들이 상대적으로 배치된 것과 같다.

a = ~int(input())
print(a)

 

6060. 입력된 정수 두 개를 비트단위로 and 연산한 후 그 결과를 정수로 출력해보자.
비트단위(bitwise)연산자 &를 사용하면 된다.(and, ampersand, 앰퍼센드라고 읽는다.)

** 비트단위(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 00000001
이 된다.

비트단위 and 연산은 두 비트열이 주어졌을 때,
둘 다 1인 부분의 자리만 1로 만들어주는 것과 같다.

이 연산을 이용하면 어떤 비트열의 특정 부분만 모두 0으로도 만들 수 있는데
192.168.0.31   : 11000000.10101000.00000000.00011111
255.255.255.0 : 11111111.11111111.11111111.00000000

두 개의 ip 주소를 & 연산하면
192.168.0.0 :     110000000.10101000.0000000.00000000 을 계산할 수 있다.

실제로 이 계산은 네트워크에 연결되어 있는 두 개의 컴퓨터가 데이터를 주고받기 위해
같은 네트워크에 있는지 아닌지를 판단하는데 사용된다.

이러한 비트단위 연산은 빠른 계산이 필요한 그래픽처리에서
마스크연산(특정 부분을 가리고 출력하는)을 수행하는 데에도 효과적으로 사용된다.

 

a, b = map(int, input().split())
print(a & b)

 

6061. 입력된 정수 두 개를 비트단위로 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 = map(int, input().split())
print(a | b)

 

6062. 입력된 정수 두 개를 비트단위로 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 = map(int, input().split())
print( a ^ b )
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))

6048. 두 정수(a, b)를 입력받아 a가 b보다 작으면 True 를, a가 b보다 크거나 같으면 False 를 출력하는 프로그램을 작성해보자.

예시
print(123<456)  #비교 연산자 < 의 계산 결과인 True(참)가 출력된다.
(123, 456 은 숫자로 작성된 단어이기 때문에 10진수로 인식된다.)

참고
어떤 값을 비교하기 위해 비교/관계(comparison/relational) 연산자(operator)를 사용할 수 있다.

비교/관계연산자 < (less than sign) 는
왼쪽의 값이 오른쪽 값 보다 작은 경우 True(참)로 계산하고,
그 외의 경우에는 False(거짓)로 계산한다.

비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고,
그 결과를 True(참), 또는 False(거짓)로 계산해 주는 연산자이다.

비교/관계연산자는 <, >, <=, >=, ==(같다), !=(다르다) 6개가 있다.

True(참) 또는 False(거짓) 값으로만 표현하고 저장하는 값을 불(bool)/불리언(boolean) 값이라고 한다.
정수, 실수, 문자, 문자열과 마찬가지로 또 다른 형태의 데이터형(data type)이다.

a, b = map(int, input().split())
if a < b:
  print(True)
elif a >= b:
  print(False)

* if / else / elif 비교

if     => 만약에

else => 만약에 그렇지 않으면

elif  => else if => 만약 그렇지 않으면 이건 어때?

출처: https://blockdmask.tistory.com/372 [개발자 지망생]


6049. 두 정수(a, b)를 입력받아 a와 b의 값이 같으면 True 를, 같지 않으면 False 를 출력하는 프로그램을 작성해보자.

참고
어떤 값을 비교하기 위해 비교/관계(comparison/relational) 연산자(operator)를 사용할 수 있다.

비교/관계연산자 == (equal sign 2개) 는
왼쪽의 계산 결과값과 오른쪽의 계산 결과값이 같은 경우 True(참)로 계산하고,
그 외의 경우에는 False(거짓)로 계산한다.

비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고,
그 결과를 True(참), 또는 False(거짓)로 계산해 주는 연산자이다.

비교/관계연산자는 <, >, <=, >=, ==(같다), !=(다르다) 6개가 있다.

** 수학에서 왼쪽과 오른쪽의 계산 결과가 같음(동치)을 나타내는 기호 =(equal sign) 1개는
프로그래밍언어에서는 전혀 다른 의미로 사용된다.

a = 1 와 같은 표현은 a와 1의 값이 같다는 의미가 아니라
오른쪽의 계산 결과값인 1을 왼쪽의 변수 a에 저장하라는 의미이다.

a, b = map(int, input().split())
if a == b :
  print(True)
elif a != b :
  print(False)

 

6050. 두 정수(a, b)를 입력받아 b의 값이 a의 값 보다 크거나 같으면 True 를, 같지 않으면 False 를 출력하는 프로그램을 작성해보자.

참고
어떤 값을 비교하기 위해 비교/관계(comparison/relational) 연산자(operator)를 사용할 수 있다.

비교/관계연산자 <= 는
오른쪽의 계산 결과값이 왼쪽의 계산 결과값보다 크거나 같은 경우 True(참)로 계산하고,
그 외의 경우에는 False(거짓)로 계산한다.

<=, >= 연산자는 같음(==)을 포함한다. 따라서 “작다/크다” 거나 "같다”는 의미를 가진다.
작다(<)/크다(>)/다르다(!) 기호는 등호(=)와 함께 왼쪽에 붙여써야 한다.

비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고,
그 결과를 True(참), 또는 False(거짓)로 계산해주는 연산자이다.
비교/관계연산자는 <, >, <=, >=, ==(같다), !=(다르다) 6개가 있다.

a , b  = map(int, input().split())
if b >= a:
  print(True)
elif b != a:
  print(False)

 

6051. 두 정수(a, b)를 입력받아 a의 값이 b의 값과 서로 다르면 True 를, 같으면 False 를 출력하는 프로그램을 작성해보자.

참고
어떤 값을 비교하기 위해 비교/관계(comparison/relational) 연산자(operator)를 사용할 수 있다.

비교/관계연산자 != 는
왼쪽의 계산 결과값이 오른쪽의 계산 결과값이 서로 다른 경우 True(참)로 계산하고,
그 외의 경우에는 False(거짓)로 계산한다.

비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고,
그 결과를 True(참), 또는 False(거짓)로 계산해주는 연산자이다.
비교/관계연산자는 <, >, <=, >=, ==(같다), !=(다르다) 6개가 있다.

a, b = map(int, input().split())
if a != b:
  print(True)
elif a == b:
  print(False)

6042. 실수 1개를 입력받아 소숫점 이하 두 번째 자리까지의 정확도로 반올림한 값을 출력해보자.


(예시)

a=float(input())
print( format(a, ".2f") )


(참고)
format(수, ".2f") 를 사용하면 원하는 자리까지의 정확도로 반올림 된 실수 값을 만들어 준다. 

여기서 만들어진 값은 소수점 아래 3번째 자리에서 반올림한 값이다.

컴퓨터 프로그래밍에서 실수 변환이나 실수를 사용하는 계산은
정확하게 변환되거나 계산되는 것이 아니라, 거의 모두 근사값으로 계산되는 것이라고 할 수 있다. 

실수가 컴퓨터로 저장되기 위해서는 디지털방식으로 2진 정수화되어 저장되어야 하는데,
그 과정에서 아주 작은 부분이 저장되지 않고 사라지는 잘림(truncation) 오차가 자주 발생하기 때문이다.

a = round(float(input()), 2)
print(a)

# a = float(input())
# print(format(a, ".2f"))

6032. 입력된 정수의 부호를 바꿔 출력해보자.


(예시) 
... 
print(-n) 

(참고)
단항(unary) 연산자인 -(negative)를 변수 앞에 붙이면 부호가 반대인 값이 된다. 
a = -int(input())
print(a)


# a = int(input())
# print(-a)

 

6033. 문자 1개를 입력받아 그 다음 문자를 출력해보자.

영문자 'A'의 다음 문자는 'B'이고, 숫자 '0'의 다음 문자는 '1'이다.

(예시)
...
print(chr(n+1))

(참고)
숫자는 수를 표현하는 문자로서 '0' 은 문자 그 자체를 의미하고, 0은 값을 의미한다.

힌트
아스키문자표에서 'A'는 10진수 65로 저장되고 'B'는 10진수 66으로 저장된다.
따라서, 문자도 값으로 덧셈을 할 수 있다. 어떤 문자의 값에 1을 더하면 그 다음 문자의 값이 된다.

a = ord(input())
print(chr(a+1))

 

6034. 정수 2개(a, b)를 입력받아 a에서 b를 뺀 차를 출력하는 프로그램을 작성해보자.

(예시)
...
c = int(a) - int(b)
print(c)

(참고)
수 - 수는 차(subtraction)가 계산된다.

a, b = input().split()
c = int(a) - int(b)
print(c)

 

6035. 실수 2개(f1, f2)를 입력받아 곱을 출력하는 프로그램을 작성해보자.

(예시)
...
m = float(f1) * float(f2)
print(m)

(참고)
수 * 수는 곱(multiplication)이 계산된다.

a, b = input().split()
c = float(a) * float(b)
print(c)

 

6036. 단어와 반복 횟수를 입력받아 여러 번 출력해보자.

(예시)
w, n = input().split()
print(w*int(n))

(참고)
문자열 * 정수 또는 정수 * 문자열은 그 문자열을 여러 번 반복한 문자열을 만들어 준다.

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

 

6037. 반복 횟수와 문장을 입력받아 여러 번 출력해보자.

(예시)
n = input()
s = input()
print(int(n)*s)

(참고)
문자열 * 정수 또는 정수 * 문자열은 그 문자열을 여러 번 반복한 문자열을 만들어 준다.

a = input()
b = input()
print(int(a)*b)

 

6038. 정수 2개(a, b)를 입력받아 a를 b번 곱한 거듭제곱을 출력하는 프로그램을 작성해보자.

(예시)
...
c = int(a)**int(b) 
print(c)

(참고)
python 언어에서는 거듭제곱을 계산하는 연산자(**)를 제공한다.
일반적으로 수학 식에서 거듭제곱을 표현하는 사용하는 서컴플렉스/케릿 기호(^)는 프로그래밍언어에서 다른 의미로 쓰인다.

a, b = input().split()
c = int(a)**int(b)
print(c)

 

6039. 실수 2개(f1, f2)를 입력받아 f1을 f2번 거듭제곱한 값을 출력하는 프로그램을 작성해보자.

(참고)
python 언어에서는 거듭제곱(exponentiation)을 계산하는 연산자(**)를 제공한다.
일반적으로 수학 식에서 거듭제곱을 표현하는 사용하는 서컴플렉스/케릿 기호(^)는 프로그래밍언어에서 다른 의미로 쓰인다.
 

a, b = input().split()
c = float(a)**float(b)
print(c)

 

6040. 정수 2개(a, b) 를 입력받아 a를 b로 나눈 몫을 출력해보자.

(예시)
...
print(a//b)

(참고)
python언어에서는 나눈 몫을 계산하는 연산자(//, floor division)를 제공한다.
a//b 와 같이 작성하면, a를 b로 나눈 몫(quotient)을 계산해준다.
프로그래밍언어에 따라 이렇게 몫을 계산해주는 연산자가 없는 경우도 있다.

실수로 나눈 몫이 어떻게 계산될지도 생각해보자.

a, b = input().split()
c = int(a)//int(b)
print(c)

 

6041. 정수 2개(a, b) 를 입력받아 a를 b로 나눈 나머지를 출력해보자.

(예시)
...
print(a%b)

(참고)
python 언어에서는 나눈 나머지를 계산하는 연산자(%, remainder)를 제공한다.
a%b 와 같이 작성하면, a를 b로 나눈 나머지(remainder)를 계산해준다.
나머지 연산(modulus, mod 연산)은 수학자 가우스가 생각해 낸 연산으로,
어떤 수를 다른 수로 나누고 난 후 남는 나머지를 계산하는 연산이다.

실수로 나눈 나머지가 어떻게 계산될지도 생각해보자.

a, b = input().split()
c = int(a) % int(b)
print(c)

6029. 16진수를 입력받아 8진수(octal)로 출력해보자.

(예시)
a = input()
n = int(a, 16)      #입력된 a를 16진수로 인식해 변수 n에 저장
print('%o' % n)  #n에 저장되어있는 값을 8진수(octal) 형태 문자열로 출력

(참고)
8진법은 한 자리에 8개(0 1 2 3 4 5 6 7)의 문자를 사용한다.
8진수 10은 10진수의 8, 11은 9, 12는 10 ... 와 같다.

a = input()
b = int(a, 16)
print('%o' % b)

 

6030. 영문자 1개를 입력받아 10진수 유니코드(Unicode) 값으로 출력해보자.

(예시)
n = ord(input())
print(n)

(참고)
n = ord(input())  #입력받은 문자를 10진수 유니코드 값으로 변환한 후, n에 저장한다.

ord( ) 는 어떤 문자의 순서 위치(ordinal position) 값을 의미한다.  
실제로 각각의 문자들에는 연속된 정수 값이 순서에 따라 부여 되어 있다. A:65, B:66, C:67 .... 
ord(c) : 문자 c 를 10진수로 변환한 값 

컴퓨터로 저장되고 처리되는 모든 데이터들은 2진수 형태로 정수화 되어야 하는데,
컴퓨터에 문자를 저장하는 방법으로 아스키코드(ASCII Code)나 유니코드(Unicode)가 자주 사용된다.

예를 들어, 영문 대문자 'A'는 10진수 값 65 로 표현하고, 
2진수(binary digit) 값 1000001 로 바꾸어 컴퓨터 내부에 저장한다. 

유니코드(unicode)는 세계 여러 나라의 문자를 공통된 코드 값으로 저장할 때 사용하는 표준 코드이다.

a = ord(input())
print(a)

 

6031. 10진 정수 1개를 입력받아 유니코드 문자로 출력해보자.


(예시)
c = int(input())
print(chr(c))  #c에 저장되어 있는 정수 값을 유니코드 문자(chracter)로 바꿔 출력한다. 


(참고)
입력은 기본적으로 모두 문자열로 입력되는 것이라고 할 수 있다. 
따라서, 입력 값이 문자/문자열/정수/실수인지에 따라서 먼저 정확하게 변환시킨 다음에 사용하거나 계산하는 것이 좋다.

예를 들어 123 이 입력 되었다고 한다면, 이건 정수일까? 문자열일까?
조금 생각해보면, 입력된 것만 보고는 그 값이 어떤 데이터인지 알 수 없다는 것을 쉽게 이해할 수 있다.
따라서, 그 입력 값을 어떻게 해석하고 변환할 지에 대해서 명확하게 작성해 주어야 하는 것이다. 

chr( )는 정수값->문자, ord( )는 문자->정수값 형태로 바꿔주는 서로 반대 방향으로 바꾸어 주는 기능을 한다.

a = chr(int(input()))
print(a)

6027. 10진수를 입력받아 16진수(hexadecimal)로 출력해보자.

(예시)
a = input()
n = int(a)            #입력된 a를 10진수 값으로 변환해 변수 n에 저장
print('%x'% n)  #n에 저장되어있는 값을 16진수(hexadecimal) 소문자 형태 문자열로 출력

(참고)
10진수 형태로 입력받고
%x로 출력하면 16진수(hexadecimal) 소문자로 출력된다.
(%o로 출력하면 8진수(octal) 문자열로 출력된다.)

10진법은 한 자리에 10개(0 1 2 3 4 5 6 7 8 9)의 문자를 사용하고,
16진법은 영문 소문자를 사용하는 경우에 한 자리에 16개(0 1 2 3 4 5 6 7 8 9 a b c d e f)의 문자를 사용한다.
16진수 a는 10진수의 10, b는 11, c는 12 ... 와 같다.

a = int(input())
print(hex(a)[2:])

 

6028. 10진수를 입력받아 16진수(hexadecimal)로 출력해보자.

(예시)
print('%X' % n)  #n에 저장되어있는 값을 16진수 대문자 형태 문자열로 출력

(참고)
10진수 형태로 입력받고
%X로 출력하면 16진수(hexadecimal)대문자로 출력된다.

16진법은 영문 소문자를 사용하는 경우에 한 자리에 16개(0 1 2 3 4 5 6 7 8 9 A B C D E F)의 문자를 사용한다.
16진수 A는 10진수의 10, B는 11, C는 12 ... 와 같다.

a = int(input())
b =  hex(a)[2:]
print(b.upper())

+ Recent posts