TIL26. algorithm 기초

Jaeyeon·2021년 2월 27일
0
post-thumbnail

casio

a, b = map(int,input().split())
if a == b:
    print(1)
else:
    print(0)

특별한 날

a = int(input())
b = int(input())
if a == 2 and  b== 18:
    print('Special')
else:
    if a < 2 or (a == 2 and b < 18):
        print('Before')
    else:
        print('After')

<Bronze 2>

1075. 나누기

문제
두 정수 N과 F가 주어진다. 지민이는 정수 N의 가장 뒤 두 자리를 적절히 바꿔서 N을 F로 나누어 떨어지게 만들려고 한다. 만약 가능한 것이 여러 가지이면, 뒤 두 자리를 가능하면 작게 만들려고 한다.
예를 들어, N=275이고, F=5이면, 답은 00이다. 200이 5로 나누어 떨어지기 때문이다. N=1021이고, F=11이면, 정답은 01인데, 1001이 11로 나누어 떨어지기 때문이다.

입력
첫째 줄에 N, 둘째 줄에 F가 주어진다. N은 100보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수이다. F는 100보다 작거나 같은 자연수이다.

출력
첫째 줄에 마지막 두 자리를 모두 출력한다. 한자리이면 앞에 0을 추가해서 두 자리로 만들어야 한다.

예제 입력 1
1000
3
예제 출력 1
02

a = int(input())			# a 입력 받기
b = int(input())			# b 입력 받기
c = a % 100				# c = a를 100으로 나눴을 때 나머지
a-=c					# a 는 a에서 c를 뺀 값
while True:				# 무한 루프
    if a % b == 0:			# 만일 a를 b로 나눴을 때 나머지가 없다면
        break				# if 문을 빠져 나가라
    else:				# 나머지가 있다면
        a+=1				# a값에 1을 더해라
print(str(a)[-2:])			# a를 정수가 아닌 문자열로 인식하고 뒤에서부터 2개의 문자를 출력해라

1076. 저항

문제
전자 제품에는 저항이 들어간다. 저항은 색 3개를 이용해서 그 저항이 몇 옴인지 나타낸다.
처음 색 2개는 저항의 값이고, 마지막 색은 곱해야 하는 값이다.
저항의 값은 다음 표를 이용해서 구한다.

색 값 곱
black 0 1
brown 1 10
red 2 100
orange 3 1000
yellow 4 10000
green 5 100000
blue 6 1000000
violet 7 10000000
grey 8 100000000
white 9 1000000000
예를 들어, 저항에 색이 yellow, violet, red였다면 저항의 값은 4,700이 된다.

입력
첫째 줄에 첫 번째 색, 둘째 줄에 두 번째 색, 셋째 줄에 세 번째 색이 주어진다. 색은 모두 위의 표에 쓰여 있는 색만 주어진다.

출력
입력으로 주어진 저항의 저항값을 계산하여 첫째 줄에 출력한다.

예제 입력 1
yellow
violet
red

예제 출력 1
4700

color = ['black', 'brown', 'red','orange', 'yellow',
'green', 'blue', 'violet', 'grey', 'white']			# 표에 있는 색깔을 리스트로 선언	
a = color.index(input())					# 사용자가 색깔을 입력하면 그 색깔의 위치를 a에 넣어줌
b = color.index(input())					# 사용자가 색깔을 입력하면 그 색깔의 위치를 b에 넣어줌
c = color.index(input())					# 사용자가 색깔을 입력하면 그 색깔의 위치를 c에 넣어줌
r = int(str(a) + str(b)) * (10 ** c)				# a와 b를 문자형으로 선언하고 둘이 더한후 다시 정수형으로 선언, c는 뒤의 0 을 담당
print(r)							# r을 출력

1100. 하얀칸

문제
체스판은 8*8크기이고, 검정 칸과 하얀 칸이 번갈아가면서 색칠되어 있다. 가장 왼쪽 위칸 (0,0)은 하얀색이다. 체스판의 상태가 주어졌을 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램을 작성하시오.

입력
첫째 줄부터 8개의 줄에 체스판의 상태가 주어진다. ‘.’은 빈 칸이고, ‘F’는 위에 말이 있는 칸이다.

출력
첫째 줄에 문제의 정답을 출력한다.

예제 입력 1
.F.F...F
F...F.F.
...F.F.F
F.F...F.
.F...F..
F...F.F.
.F.F.F.F
..FF..F.

예제 출력 1
1

arr = [list(input()) for i in range(8)]			# 2차원 리스트배열, 문장 하나씩 끊어 줌
count = 0						# 하얀 칸 위에 말이 있을 때 담아 둘 공간
for j in range(0,8,2):					# 홀수
    for k in range(0,8,2):				# 홀수
        if arr[j][k] == 'F':				# 만일 홀수 흰색판 위에 말이 있다면
            count +=1					# 1을 올려라
for l in range(1,8,2):					# 짝수
    for m in range(1,8,2):				# 짝수
        if arr[l][m] =='F':				# 만약 짝수 흰색판 위에 말이 있다면
            count +=1					# 1을 올려라
print(count)						# 하얀 판 위에 말이 몇개 올려져 있는가?

1152. 단어의 개수

문제
영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

입력
첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.

출력
첫째 줄에 단어의 개수를 출력한다.

예제 입력 1
The Curious Case of Benjamin Button
예제 출력 1
6

예제 입력 2
Mazatneunde Wae Teullyeoyo
예제 출력 2
3

예제 입력 3
Teullinika Teullyeotzi
예제 출력 3
2

a = input().split()			# a를 입력 받음
print(len(a))				# 토막난 갯수를 출력

1159. 농구 경기

문제
상근이는 농구의 세계에서 점차 영향력을 넓혀가고 있다. 처음에 그는 농구 경기를 좋아하는 사람이었다. 농구에 대한 열정은 그를 막을 수 없었고, 결국 상근이는 농구장을 청소하는 일을 시작했다. 상근이도 농구장을 청소하면서 감독이 되기 위해 가져야할 능력을 공부해나갔다. 서당개 3년이면 풍월을 읊듯이 상근이는 점점 감독으로 한 걸음 다가가고 있었다. 어느 날 그에게 지방의 한 프로농구팀을 감독할 기회가 생기게 되었다. 그는 엄청난 지도력을 보여주며 프로 리그에서 우승을 했고, 이제 국가대표팀의 감독이 되었다.
내일은 일본과 국가대표 친선 경기가 있는 날이다. 상근이는 내일 경기에 나설 선발 명단을 작성해야 한다.
국가대표팀의 감독이 된 이후에 상근이는 매우 게을러졌다. 그는 선수의 이름을 기억하지 못하고, 각 선수의 능력도 알지 못한다. 따라서, 누가 선발인지 기억하기 쉽게 하기 위해 성의 첫 글자가 같은 선수 5명을 선발하려고 한다. 만약, 성의 첫 글자가 같은 선수가 5명보다 적다면, 상근이는 내일 있을 친선 경기를 기권하려고 한다.
상근이는 내일 경기를 위해 뽑을 수 있는 성의 첫 글자를 모두 구해보려고 한다.

입력
첫째 줄에 선수의 수 N (1 ≤ N ≤ 150)이 주어진다. 다음 N개 줄에는 각 선수의 성이 주어진다. (성은 알파벳 소문자로만 이루어져 있고, 최대 30글자이다)

출력
상근이가 선수 다섯 명을 선발할 수 없는 경우에는 "PREDAJA" (따옴표 없이)를 출력한다. PREDAJA는 크로아티아어로 항복을 의미한다. 선발할 수 있는 경우에는 가능한 성의 첫 글자를 사전순으로 공백없이 모두 출력한다.

예제 입력 1
18
babic
keksic
boric
bukic
sarmic
balic
kruzic
hrenovkic
beslic
boksic
krafnic
pecivic
klavirkovic
kukumaric
sunkic
kolacic
kovacic
prijestolonasljednikovi

예제 출력 1
bk

alpha='abcdefghijklmnopqrstuvwxyz'			# 알파벳 a to z 작성
v= []							# 성 갯수가 5가 넘었을 때 담는 빈 리스트
trash=[]						# 성 갯수가 5 미만인 알파벳을 담는 빈 리스트
a = int(input())					# 갯수 입력
arr = [list(input()) for _ in range(a)]			# 갯수 만큼 선수이름을 입력받은 후 이중 리스트로 바꿈
for i in range(a):					# 입력 받은 갯수 만큼
    v.append(arr[i][0])					# 성만 v 리스트에  나열하기
for j in alpha:						# 알파벳을 쭉 나열시켜서
  if v.count(j)>=5:					# 알파벳의 갯수가 5가 넘거나 같으면
    print(j, end='')					# 그 알파벳을 출력
  else:							# 5가 안넘는다면
    trash.append(j)					# trash 리스트로 이동
if trash == list(alpha):				# 만약 trash 리스트가 alpha리스트와 똑같다면
  print('PREDAJA')					# PREDAJA 출력

1173. 운동

문제
영식이가 운동을 하는 과정은 1분 단위로 나누어져 있다. 매 분마다 영식이는 운동과 휴식 중 하나를 선택해야 한다.

운동을 선택한 경우, 영식이의 맥박이 T만큼 증가한다. 즉, 영식이의 맥박이 X였다면, 1분 동안 운동을 한 후 맥박이 X+T가 되는 것이다. 영식이는 맥박이 M을 넘는 것을 원하지 않기 때문에, X+T가 M보다 작거나 같을 때만 운동을 할 수 있다. 휴식을 선택하는 경우 맥박이 R만큼 감소한다. 즉, 영식이의 맥박이 X였다면, 1분 동안 휴식을 한 후 맥박은 X-R이 된다. 맥박은 절대로 m보다 낮아지면 안된다. 따라서, X-R이 m보다 작으면 맥박은 m이 된다.

영식이의 초기 맥박은 m이다. 운동을 N분 하려고 한다. 이때 운동을 N분하는데 필요한 시간의 최솟값을 구해보자. 운동하는 시간은 연속되지 않아도 된다.

입력
첫째 줄에 다섯 정수 N, m, M, T, R이 주어진다.

출력
첫째 줄에 운동을 N분하는데 필요한 시간의 최솟값을 출력한다.. 만약 운동을 N분 할 수 없다면 -1을 출력한다.

제한
1 ≤ N, T, R ≤ 200
50 ≤ m ≤ M ≤ 200

예제 입력 1
5 70 120 25 15

예제 출력 1
10

# 운동 분수:N
# 맥박 최소값(시작값):m
# 맥박 최대값:M
# 맥박 증가 : T
# 휴식:R
# 현재 맥박:heart
# 총 시간: time
# 운동 시간: work
N, m, M, T, R = map(int,input().split())	# 각 값 입력
heart = m					# 현재 맥박 = 최소 맥박
time = 0					# 총 시간 = 0
work = 0					# 운동한 시간 = 0
while True:					# 무한반복문
    if (m + T) > M:				# 만약 시작하기도 전에 최소맥박 + 맥박증가 > 최대맥박 이라면
        time = -1				# time = -1
        break					# if문 탈출
    if (heart + T) <= M:			# 현재 맥박 + 맥박 증가가 최대 맥박보다 작거나 같으면
        time += 1				# 시간 증가
        work += 1				# 운동 시간 증가
        heart += T				# 현재 맥박에 맥박 증가를 더함
    else:					# 현재 맥박 + 맥박 증가가 최대 맥박을 넘어 섰다면
        time += 1				# 시간은 증가
        heart -= R				# 현재 맥박에서 휴식맥박을 차감
        if heart <= m:				# 만약 현재 맥박이 최소 맥박과 같거나 작다면
            heart = m				# 현재 맥박을 최소 맥박으로 다시 설정
    if work == N:				# 만일 운동시간이 사용자가 설정한 값과 같다면
        break					# if문 탈출
print(time)					# 총 운동시간 출력
profile
생각하는 개발자 되기

0개의 댓글