본문 바로가기

TIL

[240228] SQL: 코드카타 143~144 & 파이썬: 코드카타 38(map, index, strip)

[파이썬 코드카타]

직사각형 별찍기

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() : 공백을 없애주는 함수