스터디 그룹/ProjectH4C

ProjectH4C 1개월 3,4주 과제 (코드업 66~100)

오늘은 다 끝내보도록 하자.

📖66번

입력

세 정수 a, b, c 가 공백을 두고 입력된다.
0 <= a, b, c <= +2147483647

출력

입력된 순서대로 짝(even)/홀(odd)을 줄을 바꿔 출력한다.

 

num = list(map(int, input().split()))
for i in range(3):
    if (num[i]%2==0): print('even')
    else: print('odd')

 

📖67번

입력

정수 1개가 입력된다.
-2147483648 ~ +2147483647, 단 0은 입력되지 않는다.

출력

입력된 정수에 대해
첫 줄에 minus 나 plus 를 출력하고,
두 번째 줄에 odd 나 even 을 출력한다.

 

num = int(input())
if num>0: print('plus')
else: print('minus')
if num%2==0: print('even')
else: print('odd')

 

📖68번

입력

정수(0 ~ 100) 1개가 입력된다.

출력

평가 결과를 출력한다.

 

평가 기준
점수 범위 : 평가
 90 ~ 100 : A
 70 ~   89 : B
 40 ~   69 : C
   0 ~   39 : D
로 평가되어야 한다.

 

a = int(input())
if(a>=90): print('A')
elif(a>=70): print('B')
elif(a>=40): print('C')
else: print('D')

 

📖69번

입력

영문자 1개가 입력된다.
(A, B, C, D 등의 한 문자가 입력된다.)

출력

평가내용에 따라 다른 내용이 출력된다.

 

A : best!!!
B : good!!
C : run!
D : slowly~
나머지 문자들 : what?

 

ja = input()
if ja=='A': print('best!!!')
elif ja=='B': print('good!!')
elif ja=='C': print('run!')
elif ja=='D': print('slowly~')
else: print('what?')

 

📖70번

입력

월을 의미하는 1개의 정수가 입력된다.(1 ~ 12)

출력

계절 이름을 출력한다.

 

월이 입력될 때 계절 이름이 출력되도록 해보자.


월 : 계절 이름
12, 1, 2 : winter
  3, 4, 5 : spring
  6, 7, 8 : summer
  9, 10, 11 : fall

 

m = int(input())
if m==(12 or 1 or 2): print('winter')
elif m==(3 or 4 or 5): print('spring')
elif m==(6 or 7 or 8): print('summner')
else: print('fall')

 

📖71번

입력

정수가 순서대로 입력된다.
-2147483648 ~ +2147483647, 단 개수는 알 수 없다.

출력

입력된 정수를 줄을 바꿔 하나씩 출력하는데, 0이 입력되면 종료한다.
(0은 출력하지 않는다.)

 

list = input().split()

for x in list:
  if int(x) == 0:
    break;
  print(x)

 

📖72번

입력

첫 줄에 정수의 개수 n이 입력되고,
두 번째 줄에 n개의 정수가 공백을 두고 입력된다.
-2147483648 ~ +2147483647, 단 n의 최대 개수는 알 수 없다.

출력

n개의 정수를 한 개씩 줄을 바꿔 출력한다.

n = int(input())
a = input().split()
for i in a:
    print(i)

근데 사실 파이썬에서는 이 문제에서 굳이 첫번째 줄에 n이 입력 안되어도 상관없다.

 

📖73번

입력

정수가 순서대로 입력된다.
-2147483648 ~ +2147483647, 단 개수는 알 수 없다.

출력

입력된 정수를 줄을 바꿔 하나씩 출력하는데, 0이 입력되면 종료한다.
(0은 출력하지 않는다.)

 

list = input().split()

for x in list:
  if int(x) == 0:
    break;
  print(x)

71번 문제랑 뭐가 다른건지 모르겠다.

 

📖74번

입력

정수 1개가 입력된다.
(1 ~ 100)

출력

1씩 줄이면서 한 줄에 하나씩 1이 될 때까지 출력한다.

 

n = int(input())

for i in range(n):
    print(n)
    n-=1

 

📖75번

입력

정수 1개가 입력된다.
(1 ~ 100)

출력

1씩 줄이면서 한 줄에 하나씩 0이 될 때까지 출력한다.

 

n = int(input())

for i in range(n):
    n-=1
    print(n)
    

 

📖76번

입력

영문자 1개가 입력된다.
(a ~ z)

출력

a부터 입력한 문자까지 순서대로 공백을 두고 출력한다.

 

n = input()

for i in range(ord(n)-ord('a')+1):
    print(chr(ord('a')+i), end=' ')

 

📖77번

입력

정수 1개가 입력된다.
(0 ~ 100)

출력

0부터 그 수까지 줄을 바꿔 한 개씩 출력한다.

 

n = int(input())

for i in range(n+1):
    print(i)

 

📖78번

 

입력

정수 1개가 입력된다.
(0 ~ 100)

출력

1부터 입력된 수까지 짝수의 합을 출력한다.

 

n = int(input())
hap=0
for i in range(n+1):
    if(i % 2)==0: hap+=i

print(hap)

 

📖79번

입력

문자들이 1개씩 계속해서 입력된다.

출력

'q'가 입력될 때까지 입력된 문자를 줄을 바꿔 한 줄씩 출력한다.

 

data = input().split()

for i in data:
    print(i)
    if(i=='q'): break

 

📖80번

입력

정수 1개가 입력된다.

출력

1, 2, 3, 4, 5 ... 를 순서대로 계속 더해 합을 만들어가다가,
입력된 정수와 같거나 커졌을 때, 마지막에 더한 정수를 출력한다.

 

n = int(input())
hap = 0
i = 0
while(1):
    i+=1
    hap+=i
    if(hap>=n):
        print(i)
        break
 

 

📖81번

입력

주사위 2개의 면의 개수 n, m이 공백을 두고 입력된다.
단, n, m은 10이하의 자연수

출력

나올 수 있는 주사위의 숫자를 한 세트씩 줄을 바꿔 모두 출력한다.
첫 번째 수는 n, 두 번째 수는 m으로 고정해 출력하도록 한다.

 

n, m = map(int, input().split())
for i in range(1, n+1):
    for j in range(1, m+1):
        print(i, j)

 

📖83번

입력

10 보다 작은 정수 1개가 입력된다.
(1 ~ 9)

출력

1 부터 그 수까지 순서대로 공백을 두고 수를 출력하는데,
3 또는 6 또는 9인 경우 그 수 대신 영문 대문자 X 를 출력한다.

 

n = int(input())
for i in range(1,n+1):
    if(i%3==0): print('X')
    else: print(i)

 

📖84번

입력

빨녹파(r, g, b) 각 빛의 강약에 따른 가짓수(0 ~ 128))가 공백을 사이에 두고 입력된다.
예를 들어, 3 3 3 은 각 색깔 빛에 대해서 그 강약에 따라 0~2까지 3가지의 색이 있음을 의미한다.

출력

만들 수 있는 rgb 색의 정보를 오름차순(계단을 올라가는 순, 12345... abcde..., 가나다라마...)으로
줄을 바꿔 모두 출력하고, 마지막에 그 개수를 출력한다.

 

r, g, b = map(int, input().split())
cnt=0
for i in range(r):
    for j in range(g):
        for k in range(b):
            print(i,j,k)
            cnt+=1
print(cnt)

 

📖85번

입력

h, b, c, s 가 공백을 두고 입력된다.
h는 48,000이하, b는 32이하(단, 8의배수), c는 5이하, s는 6,000이하의 자연수이다.

출력

필요한 저장 공간을 MB 단위로 바꾸어 출력한다.
단, 소수점 둘째 자리에서 반올림해 첫째 자리까지 출력하고 MB를 공백을 두고 출력한다.

 

h, b, c, s = map(int, input().split())

print(format((h*b*c*s/8/1024/1024),'0.1f'), 'MB')

 

📖86번

입력

w, h, b 가 공백을 두고 입력된다.
단, w, h는 모두 정수이고 1~1024 이다. b는 40이하의 4의 배수이다.

출력

필요한 저장 공간을 MB 단위로 바꾸어 출력한다.
소수점 이하 셋째 자리에서 반올림해 둘째 자리까지 출력한 뒤 MB를 출력한다.

 

W,H,B = map(int, input().split())

print('%.2f MB' % (W*H*B/8/1024/1024))

 

📖87번

입력

언제까지 합을 계산할 지, 정수 1개를 입력받는다.
단, 입력되는 자연수는 100,000,000이하이다.

출력

1, 2, 3, 4, 5 ... 순서대로 계속 더해가다가, 그 합이 입력된 정수보다 커지거나 같아지는 경우,
그때까지의 합을 출력한다.

 

n = int(input())

a=0
b=1

while a<n :
   a+=b
   b+=1

print(a)

 

📖88번

입력

정수 1개를 입력받는다.
(1 ~ 100)

출력

1부터 입력한 정수보다 작거나 같을 때까지 1씩 증가시켜 출력하되
3의 배수는 출력하지 않는다.

 

n=int(input())

for i in range(1, n+1):
    if (i%3==0):
        continue
    print(i, end=' ')

 

📖89번

입력

시작 값(a), 등차의 값(d), 몇 번째 수 인지를 의미하는 정수(n)가
공백을 두고 입력된다.(모두 0 ~ 100)

출력

n번째 수를 출력한다.

 

a, d, n = map(int, input().split())

print(a + d*(n-1))

 

📖90번

입력

시작 값(a), 등비의 값(r), 몇 번째 인지를 나타내는 정수(n)가
공백을 두고 입력된다.(모두 0 ~ 10)

출력

n번째 수를 출력한다.

 

a, r, n = map(int, input().split())

print(a*pow(r,n-1))

 

📖91번

입력

시작 값(a), 곱할 값(m), 더할 값(d), 몇 번째 인지를 나타내는 정수(n)가
공백을 두고 입력된다.(a, m, d는 -50 ~ +50, n은 10이하의 자연수)

출력

n번째 수를 출력한다.

 

a,m,d,n=map(int, input().split())

for i in range(n-1) :
    a = a*m + d

print(a)

 

📖92번

입력

같은 날 동시에 가입한 인원 3명이 규칙적으로 방문하는,
방문 주기가 공백을 두고 입력된다. (단, 입력값은 100이하의 자연수이다.)

출력

3명이 다시 모두 함께 방문해 문제를 풀어보는 날(동시 가입/등업 후 며칠 후?)을 출력한다.

 

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

d=1
while (d%a!=0 or d%b!=0 or d%c!=0) :
    d+=1

print(d)

 

📖93번

입력

첫 번째 줄에 출석 번호를 부른 횟수인 정수 n이 입력된다. (1 ~ 10000)
두 번째 줄에는 무작위로 부른 n개의 번호(1 ~ 23)가 공백을 두고 순서대로 입력된다.

출력

1번부터 번호가 불린 횟수를 순서대로 공백으로 구분하여 한 줄로 출력한다.

 

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

arr=[]
for i in range(24) :
    arr.append(0)
for i in range(n) :
    arr[b[i]]+=1

for i in range(1, 24) :
    print(arr[i], end=' ')

 

📖95번

입력

번호를 부른 횟수(n, 1 ~ 10000)가 첫 줄에 입력된다.
n개의 랜덤 번호(k, 1 ~ 23)가 두 번째 줄에 공백을 사이에 두고 순서대로 입력된다.

출력

출석을 부른 번호 중에 가장 빠른 번호를 1개만 출력한다.

 

n = int(input())
data = map(int, input().split())

print(min(data))

시간초과가 뜰 줄 알았는데 안 뜬다.

 

📖98번

입력

바둑알이 깔려 있는 상황이 19 * 19 크기의 정수값으로 입력된다.
십자 뒤집기 횟수(n)가 입력된다.
십자 뒤집기 좌표가 횟수(n) 만큼 입력된다. 단, n은 10이하의 자연수이다.

출력

십자 뒤집기 결과를 출력한다.

 

where = []

for i in range(19):
    where.append([])

    for j in range(19):
        where[i].append(0)

for i in range(19):
    where[i] = list(map(int, input().split()))

n = int(input())

for i in range(n):
    x, y = map(int, input().split())

    for j in range(19):
        if where[x-1][j] == 0:
            where[x-1][j] = 1
        else:
            where[x-1][j] = 0
        if where[j][y-1] == 0:
            where[j][y-1] = 1
        else:
            where[j][y-1] = 0

for i in range(19):
    for j in range(19):
        print(where[i][j], end=" ")
        
    print()

개인적으로 조금 복잡했다. (중간에 변수를 틀려서 꼬여서 다시 풀었다.

 

📖99번

입력

10*10 크기의 미로 상자의 구조와 먹이의 위치가 입력된다.

출력

성실한 개미가 이동한 경로를 9로 표시해 출력한다.

 

꽤 복잡하기는 했다. (그냥 복잡 그 이상 이하도 아니었다.)

 

arr = [[0 for col in range(10)] for row in range(10)]
where=[]
for i in range(10):
    arr[i] = list(map(int, input().split()))
    if 2 in arr[i]: goto = [arr[i].index(2), i]
goto_x, goto_y = goto
now_x=1
now_y=1
now=[now_x, now_y]
while True: 
    if (arr[now_x][now_y] == 0): 
        arr[now_x][now_y] = 9 
    elif (arr[now_x][now_y] == 2): 
        arr[now_x][now_y] = 9 
        break 
    if ((arr[now_x][now_y+1] == 1 and arr[now_x+1][now_y] == 1)): 
        break 
    if (arr[now_x][now_y+1] != 1): now_y = now_y + 1 
    elif (arr[now_x+1][now_y] != 1): now_x = now_x + 1


for i in range(10): 
    for j in range(10): 
        print(arr[i][j], end='\n') 
    print()

문제를 풀 때 방향을 잘못 잡아서 BFS, DFS, 다익스트라 등 다양한 알고리즘을 생각하였다. 단순하게 생각하자 ㅜㅜ