Programming 기초/Coding Test
[CodeUp#review] 기초 100제
코딩상륙작전
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