[파이썬 코드카타]
직사각형 별찍기
https://school.programmers.co.kr/learn/courses/30/lessons/12969
1) 어떤 문제가 있었나
주어진 2개의 정수를 활용해 *(별) 문자를 n * m 크기의 직사각형 모양으로 출력하는 문제
2) 내가 시도해본 건 무엇인가
- 힌트 코드 판에 map 함수가 있었는데, 활용법을 몰라서 map() 함수를 정확히 공부하고 문제 풀이 진행
- '/n'로 출력 값에 대해 줄바꿈을 적용해보고자 했으나 계속 오류 발생해서 실패
# 입력값 5 3
a, b = map(int, input().strip().split(' '))
# 실패코드1
(print('*'*a))*b # 오류
# 실패코드2
n = '*'*a
print(n*b, sep='|n') # ***************
# 실패코드3
('*'*a'\n')*b # 오류
3) 어떻게 해결했나
- 다른 사람 풀이를 참조하여 for 문으로 print가 n번 출력되도록 함
a, b = map(int, input().strip().split(' '))
for i in range(b):
print('*'*a)
# 정답
*****
*****
*****
- 또다른 풀이를 보니 '\n' 개행 문자를 더하기 처리 > print 하면 줄바꿈 되어서 출력
a, b = map(int, input().strip().split(' '))
answer = ('*'*a +'\n')*b
print(answer)
4) 무엇을 새롭게 알았나
- 줄바꿈하여 출력이 필요할 때 2가지 방법 참조
① '\n' 개행(줄바꿈)문자 더하기 ② for문 활용해 print()문 여러 번 출력
- map() 함수 기본 문법과 활용
① map() 함수란?
└ 반복가능한 객체의 각 요소에 특정한 함수를 적용시킬 때 사용하는 파이썬 내장 함수
└ 통상 반복가능한 객체 길이가 같아야 하며, 다를 경우 가장 짧은 객체 길이만큼 함수 반복 적용
② 기본 구조
└ 반복가능한 객체의 각 요소에 특정한 함수를 적용시킬 때 사용하는 파이썬 내장 함수
└ map 안에 함수는 각 데이터 원소를 인자로 받아서 처리하며, 함수의 반환값이 새로운 iterator 요소가 됨
map(함수명, iterable(함수를 적용할 데이터))
# 예제
num = [1, 2, 3, 4, 5]
squared_numbers = map(square, num)
print(list(squared_numbers)) # [1, 4, 9, 16, 25]
└ 여러 데이터의 원소를 인자로 받을 경우에는 함수 뒤에 순서대로 입력
map(함수명, iterable1, iterable2, ...)
# 예제
numbers1 = [1, 2, 3, 4, 5]
numbers2 = [10, 20, 30, 40, 50]
added_numbers = map(add, numbers1, numbers2)
print(list(added_numbers)) # [11, 22, 33, 44, 55]
③ map(함수, input().split() )
└ input()은 특정 변수에 입력 받은 값을 문자열로 저장해주는 함수
(사용법) x = input() 입력 > ctrl+Enter > 원하는 입력값 작성(ex. hello) > Enter > 변수 지정 완료
└ split()는 띄어쓰기 기준으로 값을 구분해주는 함수
## 1. input()
x = input()
# hello 입력 후 Enter
x
# 출력결과는
# 'hello'
## 2. input().split() : 변수 1개
y= input().split()
# hello world 입력 후 Enter
y
# 출력결과는
# ['hello', 'world']
## 3. input().split() : 변수 2개 이상
a, b = input().split()
# hello world 입력 후 Enter
print(a)
print(b)
# 출력결과는
# hello
# world
└ input().split()에서 map 함수를 쓰는 이유는?
: input().split()로 하기와 같은 수식을 만들 수 있는데, 이를 더 간편하게 만들어주는 것이 바로 map() 함수
a, b = input().split()
# 10 20 입력 후 Enter
a + b # 문자열이므로 반환값은 #1020
x = int(a)
y = int(b)
x+y # 정수형으로 변환했으므로 반환값은 #30
(오류) int(input().split()) 는 간편하지만 int함수는 리스트를 정수형으로 바꿀 수 없는 제약이 있어 사용 불가
└ 활용 예시 : 변수별로 함수를 적용할 필요 없이 map으로 한 번에 가능
s, h = map(int, input().split())
# 6 8 입력 후 Enter
s + h
# 14
* 참고: https://ccamppak.tistory.com/38
- strip() : 공백을 없애주는 함수
'TIL' 카테고리의 다른 글
[240304] 실전 프로젝트: 파이썬과 태블로를 활용한 데이터 전처리 (0) | 2024.03.04 |
---|---|
[240229] SQL: 코드카타 145 & 파이썬: 코드카타 39 (0) | 2024.02.29 |
[240227] SQL: 코드카타 141~142 & 파이썬: 코드카타 37 (1) | 2024.02.27 |
[240226] SQL: 코드카타 132~140(right/left) & 파이썬: 코드카타 36(isdecimal/isdigit/isnumeric) (0) | 2024.02.26 |
[240223] SQL: 코드카타 131 & 파이썬: 코드카타 35 (0) | 2024.02.23 |