CodeUp-6091~6098-python

cosmos·2021년 3월 8일
4
post-thumbnail
post-custom-banner

6091번

문제📖

풀이🙏

  • 같은 날 동시에 가입한 인원 3명이 규칙적으로 방문하는, 방문 주기가 공백을 두고 입력된다.
  • 3명이 다시 모두 함께 방문해 문제를 풀어보는 날을 출력한다.
    -> while 반복문 + if 조건문 + 증감표현식으로 구현한다.

코드💻

import sys

visit_list = list(map(int,sys.stdin.readline().split()))
cnt = 1

while True:
    if cnt%visit_list[0]==0 and cnt%visit_list[1]==0 and cnt%visit_list[2]==0:
        print(cnt)
        break
    cnt += 1

결과😎

출처📝
https://codeup.kr/problem.php?id=6091

6092번

문제📖

풀이🙏

  • 첫 번째 줄에 출석 번호를 부른 횟수인 정수 n이 입력된다.
  • 두 번째 줄에는 무작위로 부른 n개의 번호(1~23)가 공백을 두고 순서대로 입력된다.
  • 1번부터 번호가 불린 횟수를 순서대로 공백으로 구분하여 한 줄로 출력한다.
    -> 이중 for문 + if 조건문을 활용하여 구현하였다.

코드💻

import sys

n = int(sys.stdin.readline())
bunho_list = list(map(int,sys.stdin.readline().split()))
num_list = [i for i in range(1,23+1)]
result = [0 for i in range(1,23+1)]

for i in num_list:
    for j in bunho_list:
        if i == j:
            result[i-1] += 1

print(" ".join(map(str,result)))

결과😎

출처📝
https://codeup.kr/problem.php?id=6092

6093번

문제📖

풀이🙏

  • 번호를 부른 횟수(n, 1~ 10000)가 첫 줄에 입력된다.
  • n개의 랜덤 번호(k, 1~23)가 두 번째 줄에 공백을 사이에 두고 순서대로 입력된다,
  • 출석을 부른 번호 순서를 바꾸어 공백을 두고 출력한다.
    -> 랜덤 번호 k를 list로 받는다.
    -> list인 k를 reverse()함수를 이용해 list 요소의 순서를 반전시킨다.

코드💻

import sys

n = int(sys.stdin.readline())
k = list(map(int,sys.stdin.readline().split()))

k.reverse()

print(" ".join(map(str,k)))

결과😎

출처📝
https://codeup.kr/problem.php?id=6093

6094번

문제📖

풀이🙏

  • 번호를 부른 횟수(n, 1~10000)가 첫 줄에 입력된다.
  • n개의 랜덤 번호(k)가 공백을 사이에 두고 순서대로 입력된다.
  • 출석을 부른 번호 중에 가장 빠른 번호를 출력한다.
    -> min()함수를 이용하면 list내의 최솟값을 반환한다.

코드💻

import sys

n = int(sys.stdin.readline())
k = list(map(int,sys.stdin.readline().split()))

print(min(k))

결과😎

출처📝
https://codeup.kr/problem.php?id=6094

6095번

문제📖

풀이🙏

  • 바둑판에 올려 놓은 흰 돌의 개수(n)이 첫 줄에 입력된다.
  • 둘째 줄 부터 n+1 번째 줄까지 흰 돌을 놓을 좌표 (x,y)가 n줄 입력된다.
  • n은 10이하의 자연수이고, x,y 좌표는 1~19 까지이며, 똑같은 좌표는 입력되지 않는다.
  • 흰 돌이 올려진 바둑판의 상황을 출력한다.
  • 흰 돌이 있는 위치는 1, 없는 곳은 0으로 출력한다.
    -> 똑같은 좌표는 입력되지 않는다고 풀이에서 쓰여져있어서 중복제거를 처음에 안했었는데 똑같은 좌표가 입려되어서 실패하였다(???)
    -> 2차원 list 중복제거를 위해 listtuple로 변환시킨 후 OrderedDict 모듈의 fromkeys함수로 중복제거를 한다.

코드💻

import sys
from collections import OrderedDict

n = int(input())
baduk = [[0 for j in range(1,20)] for i in range(1,20)]
x_y = []
cnt = 0

for _ in range(n):
    location = list(map(int,input().split()))
    x_y.append(location)

x_y_tuple = [tuple(x) for x in x_y]
without_overlap = list(OrderedDict.fromkeys(x_y_tuple))
  
for i in without_overlap:
    baduk[i[0]-1][i[1]-1] += 1

for _ in range(20):
    print(" ".join(map(str,baduk[cnt])))
    cnt += 1

결과😎

출처📝
https://codeup.kr/problem.php?id=6095

6096번

문제📖

풀이🙏

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

코드💻

import sys

baduk =[[0 for j in range(20)] for i in range(20)]
cnt = 0

for i in range(19):
    badukal = list(map(int,sys.stdin.readline().split()))
    for j in range(19):
        baduk[i+1][j+1] = badukal[j]

n = int(input())

for _ in range(n):
    cross = list(map(int,sys.stdin.readline().split()))
    for i in range(1,20):
        if baduk[cross[0]][i] == 0:
            baduk[cross[0]][i] = 1
        else:
            baduk[cross[0]][i] = 0
        if baduk[i][cross[1]] == 0:
            baduk[i][cross[1]] = 1
        else:
            baduk[i][cross[1]] = 0
            
for i in range(1,20):
    for j in range(1,20):
        print(baduk[i][j],end=' ')
    print('')   

결과😎

출처📝
https://codeup.kr/problem.php?id=6096

6097번

문제📖

풀이🙏

  • 첫 줄에 격자판의 세로h, 가로w가 공백을 두고 입력되고,
    두 번째 줄에 놓을 수 있는 막대의 개수n,
    세 번째 줄부터 각 막대의 길이l, 방향d, 좌표x,y가 입력된다.
  • 모든 막대를 놓은 격자판의 상태를 출력한다.
  • 막대에 의해 가려진 경우 1, 아닌 경우 0으로 출력한다.
  • 단, 각 숫자는 공백으로 구분하여 출력한다.

코드💻

import sys

h, w = map(int,sys.stdin.readline().split())
n = int(sys.stdin.readline())
grid =[[0 for j in range(w)] for i in range(h)]
makdae = []
cnt = 0
len_num = 1

for _ in range(n):
    makdae_info = list(map(int,sys.stdin.readline().split()))
    makdae.append(makdae_info)
#     길이, (0 = 세로, 1 = 가로), x_point, y_point

for i in makdae:
    grid[i[2]-1][i[3]-1] += 1
    if i[1] == 0:
        for _ in range(i[0]-1):
            grid[i[2]-1][i[3]-1+len_num] += 1
            len_num += 1
        len_num = 1
    else:
        for _ in range(i[0]-1):
            grid[i[2]-1+len_num][i[3]-1] += 1
            len_num += 1
        len_num = 1
            
for _ in range(h):
    print(" ".join(map(str,grid[cnt])))
    cnt += 1

결과😎

출처📝
https://codeup.kr/problem.php?id=6097

6098번

문제📖

풀이🙏

  • 10*10 크기의 미로 상자의 구조와 먹이의 위치가 입력된다.
  • 개미는 오른쪽으로 움직이다가 벽을 만나면 아래쪽으로 움직여 가장 빠른 길로 움직인다.
  • 오른쪽에 길이 나타나면 다시 오른쪽으로 움직인다.
  • 먹이를 찾았거나, 더 이상 움직일 수 없을 때까지 오른쪽 또는 아래쪽으로만 움직인다.
  • 0 = 갈 수 있는 곳, 1 = 벽 또는 장애물, 2 = 먹이
  • 맨 아래의 가장 오른쪽에 도착한 경우, 더 이상 움직일 수 없는 경우, 먹이를 찾은 경우에는 더 이상 이동하지 않는다.
  • (2,2)에서 출발한다.
  • 성실한 개미가 이동한 경로를 9로 표시해 출력한다.
    코드💻
import sys

background = [[0 for cols in range(10)] for widths in range(10)]

for i in range(10):
    num = sys.stdin.readline().split()
    background[i] = list(map(int, num))
    
startPoint = (1, 1)

point = [0, 0]
point[0] = startPoint[0]
point[1] = startPoint[1]

status = 0

while status != 2:
    if background[point[0]][point[1]] == 2:
        status = 2
        background[point[0]][point[1]] = 9
    else:
        background[point[0]][point[1]] = 9

        if background[point[0]][point[1]+1] != 1:
            point[1] = point[1]+1
        else:
            point[0] = point[0] + 1

        if point[0] > 8:
            point[0] = 8
            break;
        if point[1] > 8:
            point = 8
            break;

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

결과😎

출처📝
https://codeup.kr/problem.php?id=6098

깃허브

github

post-custom-banner

0개의 댓글