프로그래머스 파이썬 기초 해석 :: a와 b 출력하기 (f string)

프로그래머스 URL 

https://school.programmers.co.kr/learn/courses/30/lessons/181951


프로그래머스 코딩테스트 카테고리 

코딩 기초 트레이닝

Day 1 출력

Lv.0





문제 설명  

입력받은 두 값을 문제가 원하는 형식에 맞게 출력하기 




문제 이해 

내가 설정한 값이 아니라, 임의적으로 입력받은 값을 출력하는 것이기에 변하는 값에 맞춰서 출력을 해야한다.




문제점    

print("a = " ) ,,,?? 일단 이렇게 쓰고, 뭘 입력하느냐에 따라 변하는 변수를 어떻게 넣어야하는지 혼란스러워짐 







문제 해답  

1. 가장 기초적인 방법 

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





2. 문자열 포매팅 - %를 쓰는 방법 

 
a, b = map(int, input().strip().split(' '))
print("a = %d" % a)
print("b = %d" % b)

%를 쓰는 포매팅 문법 ) 

값이 변하는 자리에 %d(숫자), %s(문자)를 넣고 

→ 문자열 닫고나서 뒤에 %를 붙인 뒤, 넣을 값(숫자, 문자열, 변수도 가능) 을 적으면 됨


만약 "확률은 70%입니다."를 표현하고 싶은데, 70을 변수로 넣는다고 하면

print("확률은 %d%%입니다." % a)처럼 %%로 표현해야지 %가 출력이 된다. 그 이유는 특수문자 출력하는 방법 풀이법을 참고하면 좋다. 




3. 문자열 포매팅 - format 함수를 쓰는 방법 

파이썬이 버전 업그레이드가 되면서 문법들이 고도화가 되었고, 포매팅도 많이 업그레이드 되었다. 처음에는 % 기호를 쓰는 포매팅이었지만, format 함수를 쓰는 포매팅이 생기고, 최신 버전에서는 아래 4번처럼 f string을 쓰는 방법이 생겨났다. 이 또한, 문법이니 외워야할 것 같다. 


format 함수는 중괄호 {}를 사용하여 값을 채워넣는 방식이다. 

출력할 문자열 안에서 내가 넣고자하는 변수자리에는 {}를 쓰고나서, 문자열을 닫은 뒤

.format( --, --)를 넣으면 된다. format 함수의 안에 변수 갯수는 문자열 안에서 {} 를 몇개를 했느냐에 따라 달라질 것

문자열 뒤에 꼭 콤마를 쓰고 format을 써야하는게 포인트 


 
a, b = map(int, input().strip().split(' '))
print("a = {}\nb = {}" .format(a,b))             



3. 문자열 포매팅 - f string 을 활용하기 

가장 최신의 방법이라서, 적용 안되는 파이썬 구버전을 설치했다면 실행이 불가능 할 수도 있다. 
문자열 앞에 f 접두사를 붙여서 사용하는 방식이고, 중괄호 안에 변수나 표현식을 바로 넣어서 값을 대체할 수 있다. 
가장 간결한 방식

 
a, b = map(int, input().strip().split(' '))
print(f"a = {a}\nb = {b}")




------------------------


참고

제공되는 첫 줄을 분석해보았다.. 

 
a, b = map(int, input().strip().split(' ')) 


1) map 함수

변수 = map(① 적용시킬 함수, ②적용할 값들)

②들을 ①처럼 바꿔서 새로운 자료형(리스트, 튜플 등)인 변수에 값을 적용한다.

즉, 이 문제에서는 map(int, ②) 이므로 ②값들을 int 형으로 변환한 것을 a, b 변수에 넣겠다라는 의미 



2) input 함수

변수 = input()

input()를 쓰면, 사용자가 직접 값을 입력할 수 있게 만들고, 엔터를 치면 저장이 되서 변수에 담긴다


num = input("숫자를 입력하세요 : ")
print("입력한 숫자는", num, "입니다.) 

num2 = int(input(숫자를 입력하세요 : ")) 
#위에있는 num와 다른점은 input()으로 받은걸 바로 int 형변환 시킴
print("입력한 값의 정수형은", num2, "입니다.) 




3) strip 함수

변수 =  문자열.strip()

문자열에서만 수행되고, 다른 자료형인 튜플 등에서는 오류가 생기는 strip 함수


문자열의 시작과 끝의 무언가(공백, 문자 등)을 제거함을 의미한다. 

괄호 속에 아무것도 없는 strip() 또는 strip(" ")은 공백 제거이고,

strip(".") 은 문자열 시작이나 마지막에 있는 마침표를 제거하겠다는 뜻


 
str1 = "123테스트123"
str2 = str1.strip("123") 
print(str2)         # "테스트"로만 출력이됨 



4) split 함수

변수 = 문자열.split() 

콤마 앞에 있는 문자열을 split()의 괄호 안에 있는 기준에 따라, 일정한 규칙으로 잘라서 리스트를 만들어 주는 함수


이 함수의 원래 본 모습은 split(① "구분자", ② 분활횟수) 인 것처럼 매개변수가 2개인데, 하나만 생략해도 되고 둘 다 생략해도 된다.


a) 매개변수가 둘 다(①, ②) 생략된 split()는 문자열에 있는 공백을 기준으로 무제한으로 짜르겠다.를 의미한다.

코드를 실행한 사진인데, 공백이 하나든 여러개든 공백대로 문자를 짤라서 리스트로 저장이 된걸 확인할 수 있었다. 



b) ①인 구분자,  분활횟수 둘 다 쓰는 경우
문자열.split("--", 3) 은 --를 기준으로 문자를 3번 자르겠다를 의미한다


c) ①인 구분자만 적고, ②인 분활횟수를 생략한 경우
문자열.split(",")
문자열.split("다음, ")

이렇게 어떤 문자든 넣어서 해당 문자열을 구분자를 기준으로 무제한 짜른다
분활횟수를 생략하는 경우에는 무제한으로 분활함을 의미한다. 

d) ①인 구분자를 생략하고,  분활횟수(maxsplit) 쓰는 경우
문자열.split(1) <- 불가능한 문법 
문자열.split(maxsplit=1) <- 가능

split 매개변수로 구분자를 적지 않고, 분활횟수만 숫자로 적으면, 오류가 난다.
그래서, 두번째 자리의 매개변수명인 maxsplit이라고 명시하면 오류는 안남.
구분자를 생략하고, 분활횟수만 쓰는 경우는 공백을 횟수제한해서 짜른다는 것을 의미하는데, 이런 경우는 거의 없을 듯 


5) 정리 

 
a, b = map(int, input().strip().split(' ')) 

제시된 이 첫 줄의 뜻은 input()으로 값을 입력받고, strip()로 입력받은 문자열의 양쪽 공백을 제거한 뒤, split()로 공백을 기준으로 리스트가 만들어진다.

split()로 짤라진 리스트를 map(int, ___) 를 거쳐서 숫자형으로 바뀐다. 

각 각의 숫자가 변수 a와 b에 저장이 된다. 



------------------------




느낀점 

하나의 문제를 정말 여러 방법으로 해결할 수 있음에 놀랐고, 다른 분들이 하는 풀이를 보고 최신 버전인 f string을 새롭게 알게되었다. 
난 % 포매팅만 있는줄 알았고 그렇게 풀었는데 이는 과거 문법이었었다. .. ㅎㅋ
코딩 문제를 푸는 것 또한 중요하지만, 어떻게 해석을 하고 내껄로 바꾸는지가 중요한 것 같다. 
이 글을 쓰기전에는 이 문제에서 주어지는 첫 줄인 map 함수에 대해서 잘 몰랐음에도 불구하고, 그냥 넘어가고 코딩을 풀었다는거에 의의를 뒀었다. 
그치만 이 글을 쓰면서, 내가 얼마나 부족했는지 다시끔 깨달았고, 많은 걸 배웠다. 
앞으로 코딩 풀이 글을 많이 써야겠다. .. ★






댓글

이 블로그의 인기 게시물

[KT 에이블스쿨 - IT 트랜드] 국내외 AI 관련 규제

KT 에이블스쿨 : 핀테크 아이디어 공모전

KT 에이블스쿨 : 6-7차 미니프로젝트 - 제안서 기반 솔류션 기획 및 설계