-
[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
'Programming 기초 > Coding Test' 카테고리의 다른 글
[이코테 # 구현2] 왕실의 나이트 (0) 2023.06.06 [이코테 # 구현1] 시뮬레이션 문제: 상하좌우, 완전 탐색 문제 : 시각 (1) 2023.06.06 [이코테 # Greedy3] 숫자 카드 게임 (0) 2023.06.05 [이코테 # Greedy2] 큰 수의 법칙, sort함수, 함수 매개변수의 콜론(:)과 화살표(->)의 의미 (0) 2023.06.04 [이코테 # Greedy1] 거스름돈 문제 풀이 (0) 2023.06.02