문제 1.

두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.

 

첫째 줄에 다음 세 가지 중 하나를 출력한다.

  • A가 B보다 큰 경우에는 '>'를 출력한다.
  • A가 B보다 작은 경우에는 '<'를 출력한다.
  • A와 B가 같은 경우에는 '=='를 출력한다.
A,B = map(int,input().split()) 

if A > B:
	print('>') 
elif A < B:
	print('<') 
else:
	print('==')

 

 

문제 2.

시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오.

score = int(input())

if score >= 90 :
    print('A')
elif score >= 80 :
    print('B')
elif score >= 70 :
    print('C')
elif score >= 60 :
    print('D')
else:
    print('F')

문제 3.

연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.

윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.

예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다.

year = int(input())

if ((year%4 == 0)and(year%100 != 0)) or (year%400 == 0):
    print('1')
else:
    print('0')

 

- 핵심 : 주어진 문제대로 연도를 4로 나눌 때 0이 되는 4의 배수이고 연도를 100으로 나눠서 나머지가 0이 아닌 100의 배수가 아닌 경우가 윤년이다. 또는 400의 배수이면 윤년이다. 이 경우에는 1을 출력하고 나머지의 경우에는 0을 출력한다.

문제 4.

흔한 수학 문제 중 하나는 주어진 점이 어느 사분면에 속하는지 알아내는 것이다. 사분면은 아래 그림처럼 1부터 4까지 번호를 갖는다. "Quadrant n"은 "제n사분면"이라는 뜻이다.

예를 들어, 좌표가 (12, 5)인 점 A는 x좌표와 y좌표가 모두 양수이므로 제1사분면에 속한다. 점 B는 x좌표가 음수이고 y좌표가 양수이므로 제2사분면에 속한다.

점의 좌표를 입력받아 그 점이 어느 사분면에 속하는지 알아내는 프로그램을 작성하시오. 단, x좌표와 y좌표는 모두 양수나 음수라고 가정한다.

x = int(input())
y = int(input())

if x > 0 and y > 0: 
    print("1")
elif x < 0 and y > 0:
    print("2")
elif x < 0 and y < 0:
    print("3")
else:
    print("4")

- 핵심 : 좌표에 x,y가 양수이면 1을 출력, x가 음수이고 y가 양수이면 2를 출력, x가 음수이고 y가 음수이면 3을 출력, x가 양수이고 y가 음수이면 4를 출력.

문제 5.

상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다.

상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다.

이런 상근이를 불쌍하게 보던, 창영이는 자신이 사용하는 방법을 추천해 주었다.

바로 "45분 일찍 알람 설정하기"이다.

이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다.

현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.

H, M = map(int, input().split())

if M < 45:
    if H == 0:
        H = 23
        M += 60
    else:
        H -= 1
        M += 60
        
print(H, M-45)

- 핵심 : 이 문제는 처음에 이해하기 어려웠다. 시계가 45분 일찍 돌아가는 것을 가정해야한다. 보통의 상황에서는 H(시간)에 -1을 하고 M(분)에 60을 더해준다면 해결이 된다. 하지만 시간이 0시(자정)일 경우에는 H(시간)에 -1을 하게 되면, -1시가 되기 때문에 문제가 발생한다. 이 경우에는 H를 23으로 고정하고, M(분)은 똑같이 60을 더해준다.

 

- 마무리하며 : if문은 가장 기초적이면서도 가장 많이 사용되는 함수라고 생각한다. "만약에 (if)" 만약에 우리가 대통령이 된다면? 만약에 우리가 우주를 간다면? 만약에 라는 단어는 엄청난 힘이 있다. 우리가 상상 할 수 없는 프로그래밍의 드넓은 세계를 만든 장 본인이 "만약에(if)"라는 가정에서 엄청난 디지털 세상이 탄생했다고 해도 무방할 것이다. 

파이썬 이스케이프 시퀀스에 대해서 알아보자.

다음은 w3school.com의 글을 인용해왔다.

Escape Characters

To insert characters that are illegal in a string, use an escape character.

An escape character is a backslash \ followed by the character you want to insert.

An example of an illegal character is a double quote inside a string that is surrounded by double quotes:

 

요약하면 문자열에 특이한 동작(비정상적 동작 illegal)을 넣으려면 이스케이프 시퀀스를 활용하라고 한다.

이스케이프 시퀀스는 \(역슬래쉬)를 활용하면 된다.

Code Result
\' Single Quote
\\ Back Slash
\n New Line
\r Carrige Return
\t Tab
\b Back Space
\f Form Feed
\ooo Octal Value
\xhh Hex value

이렇게만 보면 감이 안 올수도 있으니 상세하게 살펴보자

 

첫 번째의 경우

 

Code - \' , Result Single Quote 

위의 그림을 보고 바로 감이 왔을 것이라 믿는다!

' ' 안에 문자열을 적는데 '가 추가되어 있으니 이스케이프 시퀀스인 \(역슬래쉬)를 이용하였더니 그대로 '(SingQuote)를 반환해준다.

 

두 번째의 경우

 

Code - \\ , Result - Back Slash

문자열 안에 역슬래쉬 \\를 두 개 넣었더니 역슬래쉬 \ 1개로 출력된다.

 

세 번째의 경우 

 

Code - \n , Result - New line

원래는 Hello World!로 출력 되는 것이 \n를 넣으면 줄 바꿈이 되는 것을 확인할 수 있다.

화면에 출력 시 다음 행으로 줄을 바꾼다.

 

네 번째의 경우

 

Code - \r , Result - Carrige Return

위의 \n , Newline과 똑같은 결과를 보여준다. 그냥 이것도 줄바꿈이라고 보면 되겠다.

행의 처음으로 커서를 이동한다.

 

다섯 번째의 경우 

 

Code - \t, Result - Tab

키보드에서 타이핑하고 탭을 누르면 스페이스를 여러 번 누른 여백이 생기는데 \t 가 문자열에 위치하면 위와 같이 여러 번 띄어쓰기가 된 모습을 볼 수 있다.

 

여섯 번째의 경우 

 

Code - \b , Result - Back Space

문자열 안에 \b가 들어가면 백스페이스 역할을 한다. 위와 같이 HelloWorld!가 여백이 없이 출력된다.

 

일곱 번째의 경우 

 

Code - \f , Result - Form Feed

프린트 출력시 다음 페이지로 넘어간다.

 

 

여덟 번째의 경우

 

Code - \ooo , Result - Octal Value

여기서 ooo는 숫자 세자리를 의미하는 듯 하다.

Octal Value 란 팔진법을 뜻한다.

x = '\101\102\103' print(x) 이런식으로 작성하면 ABC가 출력된다. 

 

아홉 번째의 경우

 

Code - \xhh , Result - Hex Value

Hex Value 란 RGB값을 웹컬러로 표현하는 값을 말하는 듯 하다.

구글 번역기를 돌리니까 이렇게 나온다.

16 진수 값 41은 십진수로 65를 의미합니다. 그리고 십진수 65가있는 바이트는 문자 A를 나타냅니다. 마찬가지로 42는 B이고 43은 C입니다. 이것도 사실 이해를 잘 못하겠다. 자주 쓸 일이 없으니 Pass하도록 하자!

 

이렇게 오늘은 문자열 안에서 특정 (illegal)동작을 넣는 이스케이프 시퀀스 Python Escape Characters 를 알아 보았다.

기본문제 1단계에 해당하는

백준 온라인 코딩문제 풀어보기

1단계 [입출력과 사칙연산] 입니다.

총 11문제인데요.

전부 하나하나 같이 풀어보면서

리뷰해보겠습니다.

 

문제 1.

Hello World! 를 출력하시오.

print("Hello World!")

이 부분은 참 쉽죠잉?! 빠르게 다음으로 넘어갑시다.

 

문제 2.

강한친구 대한육군

강한친구 대한육군     을 출력하는 문제

print("강한친구 대한육군\n강한친구 대한육군")

핵심 - \n은 줄바꿈 기능을 한다!!

문제 3.

다음과 같은 고양이 모양을 출력하시오.

print("\    /\\")
print(" )  ( ')")
print("(  /  )")
print(" \(__)|")

핵심 - "(쌍따옴표) 앞에 \(역슬래쉬)를 출력하려면 앞에 \를 하나 더 붙여주면 된다. 이스케이프와 관련 된 문제이다. 다양한 이스케이프 문자는 다음에 한 번 나의 블로그에서 또 글을 다루도록 하겠다.

 

문제 4. 

다음과 같은 개 모양을 출력하시오.

print("|\_/|")
print("|q p|   /}")
print("( 0 )\"\"\"\\")
print("|\"^\"`    |")
print("||_/=\\\__|")      

핵심 - 3번줄과 4번줄 5번줄을 고쳐주었다. 3번줄에서 "(쌍따옴표)를 문자로 인식하기 위해서는 앞에 \(역슬러쉬)가 붙으면 된다. 4번 줄은 "(쌍따옴표)를 마찬가지로 앞에 \(역슬러쉬)를 붙여서 출력하였다. 5번줄은 \(역슬러쉬)가 2개가 붙으면 하나만 출력되므로(이스케이프), \\ (역슬러쉬 2개를 붙여주면 된다. 

문제 5.

a+b를 출력하시오.

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

핵심 - a와 b를 동시에 받고 a 인트, b인트 인자로 변환한다. a+b를 출력한다.

문제 6.

a-b를 출력하시오.

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

핵심 - 로직이 위와 동일.

문제 7.

a*b를 출력하시오.

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

핵심 - 로직이 위와 동일.

문제 8.

a/b를 출력하시오. 

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

핵심 - 로직이 위와 동일.

문제 9.

두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오. 

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

print(a+b) 
print(a-b) 
print(a*b) 
print(int(a/b)) 
print(a%b)

핵심 - 내장 함수 map 안에 int, input, split을 한 번에 넣었다. %는 나머지를 구하는 기호라고 알아두자.

문제 10.

(A+B)%C는 ((A%C) + (B%C))%C 와 같을까?

(A×B)%C는 ((A%C) × (B%C))%C 와 같을까?

세 수 A, B, C가 주어졌을 때, 위의 네 가지 값을 구하는 프로그램을 작성하시오.

A,B,C = map(int,input().split())
print((A+B)%C, ((A%C)+(B%C))%C, (A*B)%C, ((A%C)*(B%C))%C, sep='\n')

핵심 - 위에는 일일이 모든 줄에 print가 붙었지만 이번에는 깔끔하게 sep='\n'을 이용하여 ,(콤마)가 끝나면 자동으로 줄바꿈이 되게 하였다.

문제 11.

(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.

(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.

A = int(input())
B = input()

AXB2 = A* int(B[2])
AXB1 = A* int(B[1])
AXB0 = A* int(B[0])
AXB = A* int(B)

print(AXB2, AXB1, AXB0, AXB, sep='\n')

핵심 - B는 처음에 문자열로 반환한다. 한 자리 씩 떼어서 곱셈을 진행해야 하기 때문이다. 

또 다른 방법

a = int(input())
b = int(input())

print(a*(b%10),a*((b//10)%10),a*(b//100),a*b)

핵심 - 앞에 코드 보다 훨씬 짧고 깔끔, 그냥 나눗셈/을 하면 int형이 안 나오기 때문에 //로 실행한다.

a = 444 , b = 243

444 * 243 = 107,892

print ( 444*3, 444*4, 444*2, 444*243) 이런 식이 된다.   

 

Swift 공부를 하다가 국내에는 아직 무료 및 유료 강의 중 좋은 강의를 발견 하지 못 하기도 했고, 외국 강의를 듣다가 이해하기도 힘들고, 똑같은 알고리즘 문제인데도 뭔가 풀기 어려웠는데 확실히 파이썬이라는 언어가 더 쉽고 사용범위도 넓어서 배울 맛이 나는 것 같다.

물론 Swift 언어를 포기한 건 아니지만 당분간은 Python(파이썬) 언어에 집중하도록 하겠다. 

+ Recent posts