ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CodeUp#review] 기초 100제
    Programming 기초/Coding Test 2023. 6. 4. 15:55

    100제 중 기록해둘 몇 개 문항만 다룬다.

     

    * 짝수 합 구하기(6077번)

    정수(1 ~ 100) 1개를 입력받아 1부터 그 수까지 짝수의 합을 구해보자.

    [ 입력 ]
    정수 1개가 입력된다.
    (0 ~ 100)
    [출력]
    1부터 그 수까지 짝수만 합해 출력한다.
    # 더 빠른 풀이, but 가독성이 떨어짐
    k = int(input())
    print((k >> 1) * ((k >> 1) + 1))
    
    # 가독성을 조금 더 높인 풀이
    # 등차수열의 합공식n*(n+1)/2을 이용함. 
    # 모두 짝수이므로 2를 인수로 가지고 있다.
    k = int(input())
    n = k//2
    sum = n*(n+1)
    print(sum)

    시간복잡도 : O(1)

    # 제공 풀이
    n = int(input())
    
    sum=0
    for i in range(1, n+1):
        if i%2==0:
            sum=sum+i
    
    print(sum)

    시간복잡도 : O(n)

     

    * 369게임 출력 (6082번)

    입력 n보다 작은 1~n의 범위에서 3, 6, 9가 들어간 숫자는 'X'로 대체되고 그 외 숫자는 그대로 출력한다.

    단, 출력 시 1부터 n까지 순서대로 공백을 두고 수를 출력한다. 

    # n의 범위는 1~ 99이다.
    n = int(input())
    rule = [3, 6, 9]
    for i in range(1, n+1):
        ten = i//10
        last = i%10
        if (ten in rule) :
            if last in rule: print('XX', end=' ')
            else :print('X',end=' ')
        elif last in rule: print('X',end=' ')
        else: print(i,end=' ')
    # 제공 풀이
    # 입력이 n<30으로 제한되어있다.
    n = int(input())
    
    for i in range(1, n+1) :
      if i%10==3 or i%10==6 or i%10==9 :
        print("X", end=' ')
      else :
        print(i, end=' ')

     

    * round 함수와 format함수의 차이점 (6085번)

    반올림하는 함수이다. round(x, y)에서 x는 반올림하고자 하는 대상이고, y는 소수 몇번째 자리까지 반올림할 것인지 결정하는 인자이다. 

    그러나 반올림 했을 때 소수 두 번째 자리 밑으로 0이면 소수 첫 번째 자리까지만 나타낸다.

    w, h, b = map(int, input("입력:").split())
    print(round(w * h * b / 8 / 1024 / 1024, 3), "MB")
    
    w, h, b = map(int, input().split())
    print(format(w * h * b / 8 / 1024 / 1024, '.3f'), "MB")
    
    ------------------------------------------------------------
    입력:100 4 4
    0.0 MB
    
    입력:100 4 4
    0.000 MB

     

    * 이상한 출석 번호 부르기(6092번)

    입력
    첫 번째 줄에 출석 번호를 부른 횟수인 정수 n이 입력된다. (1 ~ 10000)
    두 번째 줄에는 무작위로 부른 n개의 번호(1 ~ 23)가 공백을 두고 순서대로 입력된다.
    출력
    1번부터 번호가 불린 횟수를 순서대로 공백으로 구분하여 한 줄로 출력한다.
    call = int(input())
    n = list(input().split())
    sn = [0] * 23
    for i in range(call):
        n[i] = int(n[i])
        sn[n[i] - 1] += 1
    
    for i in range(23):
        print(sn[i], end=" ")
    ----------------------------
    # 입력
    10
    1 3 2 2 5 6 7 4 5 9
    # 출력
    1 2 1 1 2 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

     

    * 바둑판에 흰돌 놓기(6095번)

    리스트 컴프리헨션!

    입력
    바둑판에 올려 놓을 흰 돌의 개수(n)가 첫 줄에 입력된다.
    둘째 줄 부터 n+1 번째 줄까지 힌 돌을 놓을 좌표(x, y)가 n줄 입력된다.
    n은 10이하의 자연수이고 x, y 좌표는 1 ~ 19 까지이며, 똑같은 좌표는 입력되지 않는다.
    출력
    흰 돌이 올려진 바둑판의 상황을 출력한다.
    흰 돌이 있는 위치는 1, 없는 곳은 0으로 출력한다.

     

    n = int(input())
    a = [[0] * 19 for _ in range(19)]	# 초기화 주의
    for i in range(n):
        x, y = map(int, input().split())
        a[x - 1][y - 1] = 1
    
    for i in range(19):
        for j in range(19):
            print(a[i][j], end=" ")
        print()
    --------------------------------------
    5		# 흰돌의 갯수
    1 1		# 흰돌을 놓을 좌표(x, y)
    2 2
    3 3
    4 4
    5 5
    # 출력 결과
    1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    2차원 배열에 경우 [[0]*19]*n으로 하면 안된다. 19개의 리스트안의 리스트가 동일 객체에 참조된다.

    그러므로 리스트 컴프리헨션으로 초기화해야한다.

     

    * 바둑알 십자 뒤집기(6096번)

    # 오리지널 답변
    m = [[0] * 19 for _ in range(19)]	#[0]*1 이어도 상관 없음. 인덱스만 만들어주면 됨
    for i in range(19):
        m[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):
            m[x - 1][j] ^= 1
            m[j][y - 1] ^= 1
    
    for i in range(19):
        for j in range(19):
            print(m[i][j], end=" ")
        print()
    d=[]
    for i in range(20) :
      d.append([])
      for j in range(20) : 
        d[i].append(0)
    
    for i in range(19) :
      a = input().split()
      for j in range(19) :
        d[i+1][j+1] = int(a[j])
    
    # 제공 답변
    n = int(input())
    for i in range(n) :
      x,y=input().split()
      x=int(x)
      y=int(y)
      for j in range(1, 20) :
        if d[j][y]==0 :
          d[j][y]=1
        else :
          d[j][y]=0
    
        if d[x][j]==0 :
          d[x][j]=1
        else :
          d[x][j]=0
    
    for i in range(1, 20) :
      for j in range(1, 20) :
        print(d[i][j], end=' ')
      print()

    a=list(map(int, input().split()))는 입력받은 str을 list 요소로 바꿔준다.

     

    * 성실한 개미(6098번)

    0은 갈 수 있는 곳, 1은 벽 또는 장애물, 2는 도착지, 지나간 경로는 9

    m[1][1]에서 출발해서 오른쪽으로 진행, 막히면 아래로 진행(오른쪽 우선), 도착하거나 움직일 수 없을 때까지 진행. 

    입력
    10*10 크기의 미로 상자의 구조와 먹이의 위치가 입력된다.
    출력
    성실한 개미가 이동한 경로를 9로 표시해 출력한다.
    # 오리지널 답변
    # 10*10 미로만들기
    m =[]
    for i in range(10):
        m.append([])
        m[i]=list(map(int, input().split()))
    
    # 미로찾기, 시작점:(2,2)
    i,j = 1,1
    m[1][1]=9
    while True :
        if m[i][j+1]!=1:     	# 오른쪽이 뚫린 경우
            j+=1
        elif m[i+1][j]!=1:   	# 아래쪽이 뚫린 경우
            i+=1
        else: break			# 움직일 수 없는 경우. 반복문 탈출.
        if m[i][j] == 2:
            m[i][j] =9
            break
        else : m[i][j] =9
    
    for i in range(10):
        for j in range(10):
            print(m[i][j],end=' ')
        print()

     

    # 입력 예시
    1 1 1 1 1 1 1 1 1 1
    1 0 0 1 0 0 0 0 0 1
    1 0 0 1 1 1 0 0 0 1
    1 0 0 0 0 0 0 1 0 1
    1 0 0 0 0 0 0 1 0 1
    1 0 0 0 0 1 0 1 0 1
    1 0 0 0 0 1 2 1 0 1
    1 0 0 0 0 1 0 0 0 1
    1 0 0 0 0 0 0 0 0 1
    1 1 1 1 1 1 1 1 1 1
    
    # 출력 예시
    1 1 1 1 1 1 1 1 1 1
    1 9 9 1 0 0 0 0 0 1
    1 0 9 1 1 1 0 0 0 1
    1 0 9 9 9 9 9 1 0 1
    1 0 0 0 0 0 9 1 0 1
    1 0 0 0 0 1 9 1 0 1
    1 0 0 0 0 1 9 1 0 1
    1 0 0 0 0 1 0 0 0 1
    1 0 0 0 0 0 0 0 0 1
    1 1 1 1 1 1 1 1 1 1

     

    댓글

Designed by Tistory.