[백준 X 파이썬] 1강

체인지영·2021년 3월 18일
0

[백준X파이썬]

목록 보기
1/6

> 백준 사이트 회원가입

2557번 Hello World

문제는 백준 사이트에서는 자신의 코드가 틀렸을 경우 어디가 오류가 난 것인지 , 이 코드로 실행시켰을때 어떤 결과 값이 나오는 지를 알수 없습니다.

Replit 회원가입, 세팅회원가입, 세팅

여기서 print("Hello World!")를 main.py 에 입력하고 실행하면 콘솔에 어떤 값이 뜨나요?

이런방식으로 우리는 백준 문제를 보고 여러번의 시행착오를 Replit을 이용해 풀것입니다.

IDE

통합개발 환경이라 불리는 IDE는 (소프트웨어 개발에 관련된 모든 작업, 즉 패키지 인클루딩, 문서 편집, 컴파일, 디버그, 원격 서버 액세스, 바이너리 배포 등을 하나의 프로그램 안에서 모두 처리하는 환경을 제공하는 툴. ) 즉, 그냥 여기서 개발관련 모든걸 할수 있다 보면 됩니다.

방금 이용한 Replit은 온라인에 이러한 환경을 구축해둔 온라인 IDE 입니다. 대중적으로 많이 파이썬으로 사용하는 IDE는 VS code나 파이참 등등이 있는데 우리는 내용에 집중할것이기 때문에 IDE는 일단 바로 쓰기 쉬운 Replit으로 씁시다. 나중에 VS code설치법을 도와드리겠습니다.

10869번 사칙연산

출력

아까와 다른점이 뭘까요? 예제 입력에 무언가가 들어오기 시작했습니다. 아까전에는 입력은 비어있었고 출력에만 조건이 들어있었습니다. 아까 이용했던 함수가 무었이였나요? print() 입니다. 가장 기본적으로 우리는 입출력에대해 오늘알아볼 것인데, 출력을 담당하는 함수는 print() 입니다.

이 파일의 이름은 main.py입니다. .뒤에붙은걸 확장자라고 하죠, py확장자는 이 파일이 파이썬 프로그램이라는 것을 알려줍니다. 그럼 파일 안의 내용이 파이썬 문법으로 이루어져있기때문에 이를 해석하는 파이썬 인터프리터가 프로그램의 각 단어를 읽고 프로그램의 목적을 파악합니다.

아까전 2557번 문제를 예로 들어 보면, 인터프리터는 print 를 보고 이후 괄호안의 내용을 전부 화면에 출력하려 합니다.

변수

 print("Hello World!")

만 출력하니까 지루합니다. 원래 어떤 함수를 배우면 그 함수로 할수있는건 전부 해보면서 함수를 가지고 놀아야 진정으로 익숙해 지는 것이거든요. 하나더 해볼까요

print("Hello World!")
print("무~야~호")
print("Hello World!")

한글도 출력이되고 다른 특수 문자들도 출력이 되네요. 그리고 출력은 print함수가 다른줄에 있으면 줄바꿈이 되어 출력되는 것을 알수 있습니다. 만약 모든 Hello World 의 느낌표가 마음에 안들어서 지우고 싶다고 가정해 봅시다. 매번 이렇게 괄호 안의 내용을 바꾸려니까 특히 print함수가 여러개인 경우 귀찮죠.

이때 변수라는 것이 등장합니다.

message = "Hello World!"
print(message)
print("무~야~호")
print(message)

아까와 똑같이 출력되지 않나요? message는 변수입니다. 모든 변수에는 값이 있고 값은 변수와 연결된 정보 입니다. 이 예제에서는 값은 "Hello World!"입니다.

인터프리터는 첫번째 행을 보고 message라는 변수는 "Hello World!"라는 값을 가지고 있구나라고 둘을 연결짓고, 두번째 행에서 print를 보고 뒤의 내용을 출력해야하는데 message와 연결된 값을 출력하게 되는 것입니다.

message = "Hello World!"
print(message)
print("무~야~호")
message = "Hello World"
print(message)
a= "ee"
print(a, 2)

콤마를 이용하면 서로다른 타입연결 가능

위의 print는 느낌표가 있는채로, 아래 print는 느낌표가 없는 채로 출력된것을 알수 있습니다. 이는 프로그램에서 변수의 값은 언제나 바뀔수 있고 파이썬은 항상 변수의 현재값만을 기억한다는 것을 알수 있습니다.

좋은 변수이름은 경험에서 나옵니다..

입력

message를 우리가 코드자체를 수정하는 것이아니라 그때그때 입력받아서 쓸수 있게 만들수는 없을까요? 당장 10869번의 경우 도 두 자연수 A와 B가 입력으로 주어진다고 합니다.

input()함수는 프로그램을 잠시 중단하고 사용자가 텍스트를 입력할 때 까지 기다리며 파이썬은 사용자 입력을 받으면 이를 변수에 저장합니다.

message = input()
print(message)
print("무~야~호")
message = "Hello World"
print(message)

인풋 안에는 문구를 쓸수도 있습니다.

message = input("This is your message : ")
print(message)
print("무~야~호")
message = "Hello World"
print(message)

앞의 문제와 같이 입력값을 특정 조건을 기준으로 분류해야 할 경우에는 split 함수를 씁니다.

a,b,c,d = input().split()
print(a,b)
print(c)
print(d)

자료형

아까전에 계속 예시로 들었던 "Hello World!"는 문자열이라는 데이터 타입입니다.
문자열 또는 string이라고 하는 이 자료형은 단순한 문자의 연속입니다. 파이썬은 다행히도 따옴표 안에만 들어있으면 무엇이든 문자열로 인식하고 작은따옴표 큰따옴표 상관없습니다. 둘다 인식하기 때문에 문장안에 따옴표를 표기하고 싶으면 서로다른 따옴표를 이용하면 되는데,

print("그녀는 '뭐' 라고 말했다.")

그녀는 '뭐' 라고 말했다. 이대로 출력이 됩니다!

간단한 문자열에 쓸수 있는 함수들을 살펴보면

message = "Hello World!"
print(message.title()) # 띄어쓰기 기준을 첫글자 대문자 
print(message.upper()) # 전부 대문자 
print(message.lower()) # 전부 소문자 

주석

지금까지는 프로그램에 파이썬 코드만 썼습니다. 프로그램이 더 길고 복잡해지면 그 안에 해결하려는 문제에 대한 전반적인 접근법을 설명하는 노트를 남겨야 합니다. 파이썬에서는 #기호가 주석이라는 표시입니다.

바로 위의 코드 #뒤의 문장은 파이썬 코드에 아무런 영향을 미치지 않습니다.

병합

아까전에 배운 입출력print()와 input()을 혼합하면 다음과 같은 코드를 작성할수도 있습니다.

message = input("This is your message : ")
print("Oh, this is " + message + " I'm happy!")

이처럼 파이썬에서는 문자열을 결합할때 더하기 기호를 씁니다. 이를 병합이라고 부릅니다.

message = input("This is your message : ")
print_message = "Oh, this is " + message + " I'm happy!"
print(print_message)

이처럼 병합한 메세지를 변수에 저장해 출력할 수 도 있습니다.

파이썬은 문자열 안의 공백을 감지합니다 .이때 공백을 지우기 위해서는

message = "       Hello World!"
print(message.lstrip()) # 왼쪽 공백 제거 
message2 = "Hello World!          "
print(message2.rstrip()) # 오른쪽 공백 제거  
print(message2.strip()) #양쪽 공백 제거 

그런데 여기서 "Oh, this is " + message 와 " I'm happy!"는 두 문장으로 줄바꿈을 하고싶다는 생각이 들지 않나요? ^^

여기서 하나 알아가면 좋은것이 제어 문자입니다. 제어문자는 출력된다거나 코드상에 영향을 주는 일은 없지만 여러일을 할수 있습니다.

message = input("This is your message : ")
print("Oh, this is " + message + "\n I'm happy!")

\n : 한줄 줄바꿈을 합니다.

message = input("This is your message : ")
print("Oh, this is " + message + "\t I'm happy!")

\t : 커서의 위치를 다음 탭위치로 옮깁니다.

제일 자주사용하는 것은 이 둘이며 그외에도 다음과 같은 표...(구글링 해보세요^^)
등등이있는데 사실 아직은 이 둘만 알아도 됩니다.

다시 문제로 돌아와서 이제 한번 읽어 봅시다. 두 자연수 A,B가주어진다는데 아 이건 input으로 받으면 되겠고, 사칙연산을 계산한 값을 출력하는 프로그램이니까 이건 print로 출력하면 되겠고.. 이제 이정도는 보이죠?

대부분 아무리 복잡한 문제라 해도 기본적인 틀은 input(무언가를 받아서) 뭔가를 하고 print(무언가를 출력하기) 하는것 입니다.

숫자형

주어진 문제에서 A, B 는 자연수 입니다. 즉, 이둘은 자료형이 숫자입니다. 몇가지 특징을 살펴봅시다.

2 + 3  # 덧셈
3 - 2  # 뺄셈  
2 * 3  # 곱셈 
3 / 2  #나눗셈
3 ** 2 # 지수 ( 3의 2승)
3 // 2 #나눗셈의 몫값
3 % 2   # 나눗셈의 나머지 값

파이썬에서는 소수도 자유롭게 연산이 가능합니다.

0.2 + 0.3  # 덧셈
0.3 - 0.2  # 뺄셈  
0.2 * 0.3  # 곱셈 
0.3 / 0.2  #나눗셈
0.3 ** 0.2 # 지수 ( 3의 2승)
0.3 // 0.2 #나눗셈의 몫값
0.3 % 0.2   # 나눗셈의 나머지 값

타입변환

오늘 우리는 크게 입출력함수와 두가지 형태의 자료형에 대해 배워봤습니다.

자료형에서 짚어야하는 다른 한가지는

'2' 는 문자열 자료형이고 2는 숫자형 자료형이라는 점입니다.

숫자형과 문자열은 정말 자주 사용되는 형태의 자료형인데 우리는 가끔 이둘의 형태를 바꿔줘야 할때가 존재합니다.

age = 12
message = "Happy" + age + "rd Birthday ! "
print(message)

이 예시에서 기대되는 출력값은 Happy 12rd birthday! 입니다. 그러나
이 코드는 에러를 일으킵니다. 에러코드 명을 읽어보면

TypeError: Can't convert "int" object to str implicitly

타입에러는 우리가 사용하려는 정보를 잘못 연결했을 때 파이썬이 보내는 신호입니다. 파이썬은 정수값을 문자열과 연결할 수 없다고 성명합니다.
우리는 12를 숫자로 인식할 때 도 , '1' 과 '2' 라는 문자로 인식할 떄도 있습니다.

그렇지만 앞의

message = "Happy" + age + "rd Birthday ! "
에서 변수가 정수와 문자열을 합하려 했기에 에러가 발생한 것입니다.
이때 str()함수를 이용하면 문자열이 아닌 값을 문자열로 변환할 수 있습니다.

age = 12
message = "Happy" + str(age) + "rd Birthday ! "
print(message)

이같은 타입변환은
만일 문자열 '2'를 숫자 2 로 변환하고 싶다면
int() 함수를 이용할 수 도 있습니다.

my_age = '21'
next_age = int(my_age) + 1
message = "Next year, my age is " + str(next_age) + "."
print(message)

이와같이 말입니다.

profile
Startup, FrontEnd, BlockChain Developer

0개의 댓글