본문 바로가기
파이썬 코드업 기초 100제

파이썬 코드업 기초 2 - 입출력

by chanfficial 2022. 1. 17.

10. 정수형(int)으로 변수를 선언하고, 변수에 정수값을 저장한 후 변수에 저장되어 있는 값을 그대로 출력해보자.

var = int(input())
print(var)

- input()으로 값을 입력받고 int()안에 넣어 정수형으로 변환한 후 변수 var에 저장하여 출력했다.

 

11. 문자형(char)으로 변수를 하나 선언하고, 변수에 문자를 저장한 후 변수에 저장되어 있는 문자를 그대로 출력해보자.

- Tip : input()의 반환값은 기본으로 문자열로 정의된다.

var = input() # Hi 입력
print(var) # Hi

- input()으로 입력받은 데이터의 기본 자료형은 문자형이므로 따로 변환할 필요없이 변수 var에 저장하여 출력했다.

 

12. 실수형(float)로 변수를 선언하고 그 변수에 실수값을 저장한 후 저장되어 있는 실수값을 출력해보자.

var = float(input()) # 4 입력
print(var) # 4.0

- input()으로 값을 입력받고 float()안에 넣어 실수형으로 변환한 후 변수 var에 저장하여 출력했다.

 

13. 정수(int) 2개를 입력받아 그대로 출력해보자. (단, 띄어쓰기를 기준으로 입력한다.)

입력 : 1 5
출력 : 1 5

 

- Tip :

  • 문자열의 메소드(함수)인 split()을 이용하면 문자열을 공백 기준으로 배열(iterable)로 만들어준다.
  • 매핑함수인 map()을 이용하면 배열(iterable)의 모든 원소를 첫 번째 매개변수(parameter)로 변환할 수 있다. 정확히는 감싸준다는 표현이 맞다.  - *예 ) map(int, ['1', '2', '3'])  >>  [1,2,3]*
  • 매핑함수 map()의 반환값은 map객체이다. 따라서 육안으로 확인하기 위해서는 list()로 변환시켜줘야한다.
    map객체를 list()로 변환시켜줘야 하는 이유
1) 정답
var = list(map(int, input().split()))
print(var[0], var[1])

- 여러가지 값들을 하나의 변수에 저장할 때는 이렇게 값을 받아 list()로 변환하는 것이 좋다.

 

2) 내가 쓴 답

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

- 나는 두 개의 값을 두 개의 변수에 따로 저장했다.

 

14. 2개의 문자(ASCII CODE)를 입력받아서 순서를 바꿔 출력해보자.

아스키 코드란?

  • 컴퓨터가 문자를 읽을 수 있도록 문자에 대응하는 숫자들이 존재한다.
  • 예 ) A => 1100001(97)
  • 이때의 문자가 '아스키 문자'이며, 숫자가 '아스키 코드'이다.

1) 정답

var = input().split()
print(var[1], var[0])

2) 내가 쓴 답

char1, char2 = input().split()
print(char2, char1)

 

15. 실수(float) 1개를 입력받아 저장한 후, 저장되어 있는 값을 소수점 셋 째 자리에서 반올림하여 소수점 이하 둘 째 자리까지 출력하시오.

Tip : 반올림 함수 round()를 이용하면 된다.

var = round(float(input()), 2) # 3.1111 입력
print(var) # 3.11 출력

 

16. int형 정수 1개를 입력받아 공백을 사이에 두고 3번 출력해보자.

1) 정답

var = int(input())
print(var, var, var)

2) 내가 쓴 답

a = int(input())
print(a, a, a, sep=' ') # end=' '도 가능

- 굳이 sep을 사용하지 않아도 되기 때문에 정답처럼 간단하게 하는것이 좋다.

 

17. 어떤 형식에 맞추어 시간이 입력될 때, 그대로 출력하는 연습을 해보자. 콜론(:) 기호를 기준으로 두 수가 각 변수에 저장된다.

입력 : 3:15
출력 : 3:15

 

Tip :

  • split()의 매개변수로 문자열을 분할하기 위한 기준을 정의할 수 있다.
  • 문자열의 메소드(함수)인 format()을 이용하면 문자열 내부에 변수값을 대입할 수 있다.

1) 정답

h, m = input().split(':')
print('{}:{}'.format(h, m))

- 입력받은 값을 : (콜론)을 기준으로 분할하여 변수에 저장했고 문자열 메소드 format()을 사용하여 문자열의 { }내부에 변수 값을 대입할 수 있다.

 

2) 내가 쓴 답

a, b = input().split(':')
print(a, b, sep=':')

 

18. 년, 월, 일을 입력받아 지정된 형식으로 출력하는 연습을 해보자.

입력
연, 월, 일이 ".(닷)"으로 구분되어 입력된다.
출력
입력받은 연, 월, 일을 yyyy.mm.dd 형식으로 출력한다.

  • 입력 : 2020.2.9
    출력 : 2020.02.09 (단, m 혹은 d가 한 자리 수인 경우 앞에 0을 붙여 출력한다.)

1) 정답

y, m, d = input().split('.')
if len(m) == 1: # len() : 길이를 알 수 있음
  m = '0'+m
if len(d) == 1:
  d = '0'+d
print('{}.{}.{}'.format(y, m, d))

- if 조건문을 사용하여 m(월)과 d(일)이 한 자리수 이면 앞에 0을 붙여 출력하도록 해주었는데, 이 때 그냥 0을 붙이면 0 + m(d) = m(d)가 되므로 0을 문자형으로 붙이도록 해야한다.

 

2) 내가 쓴 답

y, m, d = map(int, input().split('.'))
print(y, m, d, sep='.')

- 'm 혹은 d가 한 자리 수인 경우 앞에 0을 붙여 출력한다'는 조건문을 작성하지 못했다.(len()을 생각 못했음)

 

19. 주민번호는 다음과 같이 구성된다. XXXXXX-XXXXXXX

앞의 6자리는 생년월일(yymmdd)이고 뒤 7자리는 성별, 지역, 오류검출코드이다.
주민번호를 입력받아 형태를 바꿔 출력해보자.

입력
주민번호 앞 6자리와 뒷 7자리가 '-'로 구분되어 입력된다. (입력값은 가상의 주민번호이다.) ex)110011-0000000
출력
'-'를 제외한 주민번호 13자리를 모두 붙여 출력한다.

  • 입력 : 000907-1121112
    출력 : 0009071121112

1) 정답

a, b = input().split('-')
print('{}{}'.format(a,b))

- 입력받은 값 a, b를 - 문자로 구분해주고 format()을 사용하여 출력했다.

 

2) 내가 쓴 답

a, b = input().split('-')
print(a, b, sep='')

- sep=''을 사용하여 입력받은 값 두 개가 공백 없이 출력되도록 했다.

 

20. 1개의 문자열을 입력받아 그대로 출력해보자.

string = input()
print(string)

 

21. 공백이 포함되어 있는 한 문장이 입력된다. 단, 입력되는 문장은 여러 개의 단어로 구성되고, 엔터로 끝난다.

string = input()
print(string)

 

22. 실수 1개를 입력받아 정수 부분과 실수 부분으로 나누어 출력한다.

입력 : 1.435867

출력 :
1
435867

 

1) 정답

string = input().split('.')
print('''\
{}
{}
'''.format(string[0], string[1]))

- 실수를 입력받아야 하는데 float()를 사용하지 않아서 뭐지 싶었다. 또 지금까지 sep, end를 사용하여 문제를 풀었더니 format() 사용법을 잘 알지 못해서 어떻게 하나의 문자열을 나눠서 출력해야 할지 고민하느라 답을 적지 못했다.

 

23. 단어를 1개 입력받는다. 입력받은 단어(영어)의 각 문자를 한줄에 한 문자씩 분리해 출력한다.
(단, 단어의 문자(영어)를 하나씩 나누어 한 줄에 한 개씩 ' '로 묶어서 출력한다.)

입력 : 'Boy'

출력 :
'B'
'o'
'y'

 

Tip :

  • str도 List와 동일하게 배열과 같은 형식으로 접근가능하다. 문자열도 리스트와 같이 iterable 객체이기 때문이다.
    • ex) '문자열'[0] >> '문'
  • 반복문 for()를 이용하여 문자열의 길이만큼 반복한다.

1) 정답

string = input()
for i in range(len(string)):
  print("'{}'".format(string[i]))
  
# 더 간단하게
string = input()
for i in string:
	print("'{}'".format(i))

- 입력받은 문자열에 배열처럼 접근하여, 문자열 각각의 요소를 출력하도록 했다.

 

2) 내가 쓴 답

string = input()
for i in range(len(string)):
	print(string[i])

- 다른 것은 구현했지만 ''(작은따옴표)로 묶어서 출력하는 것을 구현하지 못했다. 이 또한 format()을 잘 몰라서 그랬다. 

 

24. 다섯 자리의 정수 1개를 입력받아 각 자리별로 나누어 출력한다.

입력 :
75254

출력 :
[70000]
[5000]
[200]
[50]
[4]

 

Tip : 문자열 연산이 가능함을 잊지 말자.

  • ex) '문자'*5 >> '문자문자문자문자문자'

1) 정답

integer = input()
count = len(integer)-1
for i in range(len(integer)):
  print([int(integer[i] + '0'*count)])
  count -= 1
  
# 더 간단하게
integer = input()
count = len(integer)-1
for i in integer:
  print([int(i + '0'*count)])
  count -= 1

- 정수가 다섯자리 일때는 0이 네 개, 네자리 일때는 0이 세 개, 세자리 일때는 0이 두 개....이 규칙을 이용하여 count(0의

개수) = len(integer)-1 로 지정한다.

 

2) 내가 쓴 답

string = input()
print(int(string[0])*10000\n, int(string[1])*1000\n, int(string[2])*100\n, int(string[3])*10\n, int(string[4]))

- 분명 반복문을 사용해야 하는걸 아는데 저 곱셈 사이에 있는 규칙을 반복문으로 표현을 못해서 이런 말도안되는 노가다 답을 적었다.

 

25. 입력되는 시:분:초 에서 분만 출력해보자.

h, m, s =  input().split(':')
print(m)

 

26. 년월일을 출력하는 방법은 나라마다, 형식마다 조금씩 다르다. 년월일(yyyy.mm.dd)를 입력받아, 일월년(dd-mm-yyyy)로 출력해보자. (단, 한 자리 일/월은 0을 붙여 두자리로 출력한다.)

Tip : 조건문 if-else문을 파이썬의 3항 연산자(Chapter 10 참고) 기능을 이용하면 더 간단하게 작성할 수 있다. 이렇게 작성하는 것이 메모리 효율성면에서도 효과적이다. (18번 참고)

 

1) 정답

y, m, d = input().split('.')
m = '0'+m if len(m) == 1 else m
d = '0'+d if len(d) == 1 else d
print('{}-{}-{}'.format(d, m, y))

- 입력 받은 값을 '.' 으로 구분하여 각각 y, m, d라는 변수에 저장하여 'len(m) == 1'이 참이면(m이 한 자리 수이면) if 앞에 있는 내용을 실행하고 거짓이면 else 뒤에 있는 내용을 실행하도록 조건문을 작성했다.

 

2) 내가 쓴 답

y, m, d = input().split('.')
if len(m) == 1:
	m = '0'+m
else:
	m = m
if len(d) == 1:
	d = '0'+d
else:
	d = d
print(d, m, y, sep='-')