Today I Learned

[TIL] PS 강의 Sec.01-3~6 / 조건문 / 반복문 / 반복문을 이용한 문제 풀이 / 중첩반복문, 백준 10817 세 수, 백준 2455 지능형 기차 [21-11-03]

목차

TIL

- 알고리즘 강의 1-3 ~ 1-6

- 백준 10817

- 백준 2455

 


TIL

 오늘, 갑작스럽게 결과 발표가 나서, 계획한 만큼 못했다. 다시 초연하게 천천히 꾸준하게 나아가자. blank 프로젝트에 쏟은 시간은 1~2시간 정도이고, notion 페이지를 만드는데, 꽤나 많은 시간을 보냈다. notion, 정말 알면 알수록 좋은 것 같다. 

 

 

알고리즘 강의 1-3 ~ 1-6

https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8

 

파이썬 알고리즘 문제풀이 (코딩테스트 대비) - 인프런 | 강의

파이썬을 이용한 코딩테스트 문제풀이를 합니다., [사진] 강좌를 다음과 같이 공부해 문제해결력을 기르기 바랍니다. 1. 문제와 자동채점폴더를 제공하니, 영상을 보기 전에 꼭 먼저 문제를 스스

www.inflearn.com

 다시 복습을 하면서 많이 도움이 되는 것 같다. 조건문에서는 가령 and라던지(습관상 &로 사용했었다), 0 < x < 7 처럼 사용 가능하다던지, 그리고 반복문에서는 for else 문에서는 else가 for문에 종속되어서, break 되는 경우 else를 거치지 않는 것을 뿐만 아니라 continue를 만나면 해당 for문의 i 값을 넘어가는 것을 배웠다.

 

 별 찍기에서는 print안에 end를 넣어서 편하게 구현할 수 있다는 점, (내가 풀었을 때 end를 넣는 것을 생각못했었다) 복습을 하면서 많은 부분을 다시 배우는 것 같다.

 

 

Sec.1-3 조건문(if분기문, 다중if문)

'''
조건문 if(분기, 중첩)
'''
x = 7
if x == 7:
    print("Lucky")
    print("ㅋㅋ")

x = 5
if x != 7:
    print("Lucky")
    print("ㅋㅋ")


'''중첩 if문'''
x = 15
if x >= 10:
    if x % 2 == 1:
        print("10이상의 홀수")

x = 12
if x >= 10:
    if x % 2 == 1:
        print("10이상의 홀수")

x = 9
if x >= 10:
    if x % 2 == 1:
        print("10이상의 홀수")

x = 10
if x > 0:
    if x < 10:
        print("10보다 작은 자연수")

x = 7
if x > 0 and x < 10:
    print("10보다 작은 자연수")

# 파이썬에서만 허용
x = 7
if 0 < x < 10:
    print("10보다 작은 자연수")


'''if 분기문'''
x = 10
if x > 0:
    print("양수")
else:
    print("음수")

x = -3
if x > 0:
    print("양수")
else:
    print("음수")


'''다중 if 문'''
# 하나가 걸리면 조건문 전체를 빠져나온다
x = 93
if x >= 90:
    print('A')
elif x >= 80:
    print('B')
elif x >= 70:
    print("C")
elif x >= 60:
    print("D")
else:
    print("F")

# if문의 경우는 각각 따로 실행된다
x = 93
if x >= 90:
    print('A')
if x >= 80:
    print('B')
if x >= 70:
    print("C")

 

Sec.1-4 반복문(for, while, break, continue)

'''
반복문(for, while)
'''
a = range(10)
print(list(a))

a = range(1, 11)
print(list(a))


'''for문'''
for i in range(10):
    print("hello")

for i in range(10):
    print(i)

for i in range(1, 11):
    print(i)

# 아무일도 안 일어남
for i in range(10, 0):
    print(i)

# 더하는 값을 지정해준다
for i in range(10, 0, -1):
    print(i)


'''while문'''
i = 1
while i <= 10:
    print(i)
    i = i + 1

i = 10
while i >= 1:
    print(i)
    i = i - 1


'''break'''
# break을 쓰게되면 해당 반복문을 빠져나오게 된다
i = 1
while True:
    print(i)
    if i == 10:
        break
    i += 1

i = 1
while True:
    print(i)
    if i == 5:
        break
    i += 1


'''continue'''
# 어떤 것을 건너 뛰고 싶을 때 continue를 쓴다
for i in range(1, 11):
    # if문 조건이 참일 때 for문을 건너 뛴다
    if i % 2 == 0:
        continue
    print(i)


'''for else 구문'''
# 정상적인 종료가 아니고 break로 종료하게 되면 else문을 거치지 않는다
for i in range(1, 11):
    print(i)
    if i == 5:
        break
else:
    print(11)

# 정상적인 종료일 경우(break로 종료 X), else문을 거친다
for i in range(1, 11):
    print(i)
    if i > 15:
        break
else:
    print(11)

 

Sec.1-5 반복문을 이용한 문제 풀이

'''
반복문을 이용한 문제풀이
 1) 1부터 N까지 홀수출력하기
 2) 1부터 N까지의 합 구하기
 3) N의 약수출력하기
'''

# 내가 푼 답
# 1) 1부터 N까지 홀수출력하기
n = int(input())
for i in range(1, n + 1):
    if i % 2 == 1:
        print(i)

# 2) 1부터 N까지의 합 구하기
n = int(input())
total = 0
for i in range(1, n + 1):
    total += i
print(total)

# 3) N의 약수출력하기
n = int(input())
for i in range(1, n + 1):
    if n % i == 0:
        print(i)


# 강사님 답안
# 값을 받아오고 출력해보자
# n = int(input())
# n 까지이기 때문에 n + 1을 해준다
n = int(input())
for i in range(1, n + 1):
    print(i)

# 1) 1부터 N까지 홀수출력하기
n = int(input())
for i in range(1, n + 1):
    if i % 2 == 1:
        print(i)

# 2) 1부터 N까지의 합 구하기
n = int(input())
sum = 0
for i in range(1, n + 1):
    sum = sum + i
# for문이 끝난 후 출력!
print(sum)

# 3) N의 약수출력하기
n = int(input())
for i in range(1, n + 1):
    # n에 i로 나눈 나머지가 0인 값은 n의 약수이며 약수 값은 i가 된다
    if n % i == 0:
        print(i, end=' ')

 

Sec.1-6 중첩 반복문(2중 for문)

'''
중첩 반복분(2중 for문)
'''
for i in range(5):
    for j in range(5):
        print(j, end=' ')
    print()

for i in range(5):
    print('i: ', i, sep='', end=' ')
    for j in range(5):
        print('j: ', j, sep='', end=' ')
    print()

# 별 찍기 5 * 5
for i in range(5):
    for j in range(5):
        print("*", end=' ')
    print()

# 별 찍기 1 2 3 4 5 *
for i in range(5):
    for j in range(i + 1):
        print("*", end=' ')
    print()

# 별 찍기 5 4 3 2 1 *
for i in range(5):
    for j in range(5 - i):
        print("*", end=' ')
    print()

 

 

백준 10817 세 수

https://www.acmicpc.net/problem/10817

 

10817번: 세 수

첫째 줄에 세 정수 A, B, C가 공백으로 구분되어 주어진다. (1 ≤ A, B, C ≤ 100)

www.acmicpc.net

 쉬운 문제였다. 배열로 받고 sort 하고 1번째 인덱스 값 출력하면 끝! sort가 정말 강력한 내장 함수인 것 같다. c라면 모두 구현해야 하는데...

a, b, c = map(int, input().split())
_arr = [a, b, c]
_arr.sort()
print(_arr[1])

문제 풀이 시간 36 초

 

 

백준 2455 지능형 기차

https://www.acmicpc.net/problem/2455

 

2455번: 지능형 기차

최근에 개발된 지능형 기차가 1번역(출발역)부터 4번역(종착역)까지 4개의 정차역이 있는 노선에서 운행되고 있다. 이 기차에는 타거나 내리는 사람 수를 자동으로 인식할 수 있는 장치가 있다.

www.acmicpc.net

  강력한 내장 함수 max를 쓰니 가볍게 해결할 수 있었다. 각각의 output, input값을 받아서, 해당 배열에 계속 추가해준다. 변수 하나를 사용하여 계속 값을 넣어주었다. 

_output_1, _input_1 = map(int, input().split())
_output_2, _input_2 = map(int, input().split())
_output_3, _input_3 = map(int, input().split())
_output_4, _input_4 = map(int, input().split())

_arr = []
person_num = _input_1
_arr.append(person_num)

person_num = person_num + _input_2 - _output_2
_arr.append(person_num)

person_num = person_num + _input_3 - _output_3
_arr.append(person_num)

person_num = person_num + _input_4 - _output_4
_arr.append(person_num)

result = max(_arr)
print(result)

문제 풀이 시간 4분 47초