Mj_sec 4.5기

CodeUp 문제풀기

dudu9 2026. 7. 7. 01:02

4. 

딱히 설명할 것 없이 간단하다. 

print("'Hello'")

 

 

 

 

 

 

8.

 

막혔던 부분

f스트링을 사용하면 \n을 그냥 문자로 인식해서 바로 출력이 될 줄 알고

print(f""Hello\nWorld"")

라고 입력 해봤는데 당연히 안되었다.

 

정답은 

print('print("Hello\\nWorld")')

이것인데, 먼저 내가 놓쳤던 부분은

 

1. 바깥에 작은 따옴표 로 감싸면 안에 큰 따옴표를 그냥 문자로 쓸 수 있게 한다.

2. \n 을 줄바꿈이 아니라 문자로 출력하려면 앞에 \ 을 하나 더 붙이면 된다.

 

이 두가지 이다.

 

 

 

 

 

12.

 

정답은 

a = int(input())
b = int(input())

print(a)
print(b)

 

막혔던 부분은 딱히 없고 설명할 것은  a와 b가 정수이므로 int 를 input 앞에 붙여서 사용해줬다는 부분.

 

 

 

 

16. 

 

정답은

a,b = input().split()
print(b,a)

 

.split() 이 띄어쓰기를 기준으로 구분해주는 역할을 한다.

 

 

 

 

20. 

 

정답은

jumin = input()
result = jumin.replace("-", "")

print(result)

 

막혔던 부분 

 

.replace 를 몰라서 -를 어떻게 빼야할지 몰랐다.

 

 

 

 

24. 

 

정답

a, b = input().split()
print(a+b)

딱히 어려운 부분은 없었다.

 

 

 

 

28.

 

정답

a = int(input())
print('%X'%a)

 

print('%X'%a) 는 a에 저장되어 있는 값을 16진수 대문자로 출력하라는 뜻이다.

 

 

 

 

32.

 

정답

a = int(input())
print(-a)

 

딱히 어려운 부분은 없었다.

 

 

 

 

36.

 

정답

a, b = input().split()
print(a*int(b))

 

참고 : 문자열 * 정수 또는 정수 * 문자열은 그 문자열을 여러 번 반복한 문자열을 만들어 준다.

int는 맨처음 변수 선언할 때만 쓸 수 있는 단어인 줄 알았는데 중간에도 끼워넣을 수 있는 점을 알게 되었다.

 

 

 

 

40.

 

 

막혔던 부분

a, b = int(input().split())
print()

 

 

앞에 int를 붙여도 .split() 이 유효한 줄 알고 위와 같이 적었다가 틀렸다.

정수에는 .split() 이 존재하지 않는다. .split() 은 문자열(str) 전용 함수이기 때문에 에러가 난다. 

 

대신,

a, b = input().split()
a = int(a)
b = int(b)
print(int(a/b))

이런식으로 먼저 1. 나누고, 2. 변환하기 순서로 하거나

 

map 을 이용하여 

a, b = map(int, input().split())
print(int(a/b))

 

이런식으로 더 간편하게 나타낼 수 있다.

 

 

 

 

44.

 

정답은

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

print(a+b)
print(a-b)
print(a*b)
print(a//b)
print(a%b)
print(f"{a/b:.2f}")

 

딱히 어려웠던 점은 없다. 

주의할 점은 마지막 print 에서 소숫점 둘째자리까지만 값이 나오도록 해야한다는 점 정도이다.

 

round를 사용하여

a, b = map(int, input().split())
print(round(a/b, 2))

이런식으로 나타내는 것도 가능하지만 round는 끝자리가 0이면 생략하여 3.30 으로 나와야 할 것이 3.3 으로 나오기 때문에 " 실수, 소수점 이하 둘째 자리까지의 정확도로 출력" 이라는 조건에는 알맞지 않아보여 사용하지 않았다.

 

 

 

 

48.

 

정답은

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

if a < b :
	print("True")
else : 
	print("False")

 

딱히 어려운 부분은 없었다.

 

 

 

 

52.

 

정답

 

print(bool(n))

처음에는 위와 같은 형태의 문법을 몰라서

 

if 문으로

n = int(input())
if n == 0:
    print("False")
else:
    print("True")

이렇게 풀었다. 이 풀이도 틀린 풀이는 아니지만 문제의 출제자가 원하는 정답은 bool 대수를 써서 푸는 것이기에 완벽히 맞았다고는 할 수 없다. 

 

완벽한 정답은 

n = int(input())
print(bool(n))

이라고 할 수 있다.

 

 

 

 

 

56.

 

정답

a, b = input().split()
c = bool(int(a))
d = bool(int(b))
print((c and (not d)) or ((not c) and d))

 

(c and not d) or (not c and d) >> c와 d가 다를때만 True

 

즉, 

print(c != d)

이것과 같다고 볼 수 있다.

 

 

 

 

 

60.

 

막혔던 부분 

a, b = input().split()
print(1 if (int(a) != 0 and int(b) != 0) else 0)

비트AND 와 논리AND 를 헷갈려서 위와 같은 식도 가능하지 않을까 헷갈렸었다.

비트엔드와 논리엔드는 완전히 다르기 때문에 반드시

a, b = input().split()
print(int(a) & int(b))

이렇게 & 기호를 써서 나타내야 한다.

 

**주의**

논리 AND (and): "참이냐 거짓이냐" 딱 하나만 판단
비트 AND (&): 숫자를 2진수로 놓고 자리마다 따로따로 판단

a = 2
b = 1

print(a and b)   # 1  → (둘 다 참이니까 뒤에 있는 b값을 그대로 반환)
print(a & b)     # 0  → (2=10, 1=01 → 겹치는 자리가 없어서 0)

 

 

 

 

64.

정답

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

d = a if a<b else b
e = d if d<c else c

print(e)

 

딱히 어려운 점은 없었다.

 

 

 

 

68.

정답

a=int(input())

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

정말 어려운 점이 없었다.

 

 

 

 

72.

정답

a=int(input())

while a!=0:
    print(a)
    a=a-1

 

정말 어려운 부분은 없엇다.

 

 

 

 

 

76.

정답

n=int(input())

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

 

그냥 

for i in range(n) 해버리면 0~n-1 까지밖에 안세므로 꼭 n+1 을 해야한다.

 

 

 

 

80.

정답

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

for i in range(1, n+1) :
  for j in range(1, m+1) :
    print(i, j)

 

위 문제와 마찬가지로 주사위에 0은 없으니 1부터, n+1까지로 적어주어야한다.

 

 

 

 

84.

문제 푸는 순서

1. 총 비트 수 계산 = h * b * c* s

2. 비트를 바이트로 바꾸기

3. 바이트 → KB → MB

 

막힌 부분

비트 를 바이트나 MB로 바꾸는 부분만 조심하면 어려운 점은 없다.

 

정답

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

bit_size = h * b * c * s      
byte_size = bit_size / 8      
mb_size = byte_size / 1024 / 1024   

print(f"{mb_size:.1f} MB")

 

 

 

 

 

88.

 

막혔던 부분

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

s=a
for i in range(1, n+1):
   s = s + d

print(s)

계속 이런식으로 적어서 틀렸는데, 이미 s=a 라고 한부분에서 첫째항은 적립(?) 이 된 것이므로 범위를 2부터 시작해야 한다.

 

 

정답

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

s=a
for i in range(2, n+1):
   s = s + d

print(s)

 

 

 

 

 

92.

 

복잡해 보이지만 문제에 나와있는 형식을 바탕으로 하면 할 수 있다.

 

 

n = int(input())

첫 번째 줄 입력을 받아서 정수로 변환 후 n에 저장

 

a = input().split()

두 번째 줄 입력을 공백 기준으로 잘라서 리스트로 저장

 

for i in range(n):
    a[i] = int(a[i])

a 리스트 안의 문자열들을 하나씩 정수로 바꿔줌

더보기

반복 안에서 a[i] = int(a[i])가 하는 일 : 

a[i] → 지금 i번째 자리에 있는 값을 꺼냄 (아직 문자열, 예 : 1)

int(a[i]) → 그 값을 정수로 변환 (1)

a[i] = ... → 변환한 값을 다시 같은 자리에 덮어쓰기

d = [0] * 24

하는 일: 0이 24개 들어있는 리스트 만들기.

 

d = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

왜 0이 24개인가? : 출석 번호가 1번부터 23번까지 있기 때문에, d[1]부터 d[23]까지 써야 한다. 하지만 리스트 인덱스는 0번부터 시작, d[23]까지 쓰려면 최소 24칸이 필요. (0번 칸은 그냥 안 쓰고 버림)

 

for i in range(n):
    d[a[i]] += 1

하는 일: 실제로 각 번호가 몇 번 나왔는지 센다.

 

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

하는 일: 1번부터 23번까지 카운트 결과를 출력

range(1, 24) → 1, 2, 3, ..., 23 (24는 포함 안 됨)

 

결과

1 2 1 1 2 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

 

 

 

96.

 

문제 설명

- 19x19 바둑판에 흑돌 = 0, 백돌 = 1이 꽉 채워져 있음.

- 좌표 (x, y)가 주어지면 그 자리를 지나가는 가로줄 전체랑 세로줄 전체의 돌 색을 반대로 뒤집는다.

- (x, y) 그 자리 자체는 원래 색 그대로 유지

- 뒤집기가 n번 반복된 후 최종 바둑판 상태를 출력

 

리스트

- 표니까 가로 세로가 있어서 리스트 안에 리스트를 넣는 2차원 리스트 생성.

- 좌표가 1번부터 시작하기 때문에 그냥 0번부터 쓰면 자꾸 헷갈릴 것 같아서, 아예 20x20으로 크게 만듦.

 

코드를 짠 순서

- 20x20 리스트를 만들어서 다 0으로 채우기

- 19줄 입력을 받아서 바둑판 초기 상태(흑돌/백돌)를 표 안에 넣음.  인덱스를 1번부터 쓰니까 i+1, j+1 이런 식으로 한 칸씩 밀어서 넣음

- 좌표 (x, y)가 n번 주어지는데, 이걸 처리할 때마다 1번부터 19번까지 돌면서 y번 세로줄 돌들을 하나씩 뒤집고 x번 가로줄 돌들도 하나씩 뒤집음.

 

정답

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()

 

덩어리 1.

d=[]
for i in range(20) :
  d.append([])
  for j in range(20) : 
    d[i].append(0)

할 일 : 20×20짜리 표를 만들어서 전부 0으로 채우기.

20칸으로 만들어놓고 0번째 줄/칸은 버림.

 

덩어리 2.

for i in range(19) :
  a = input().split()
  for j in range(19) :
    d[i+1][j+1] = int(a[j])

할 일 : 19줄을 입력받은뒤, 20×20 표 중 1번~19번 칸에 실제 값 채우기.

입력받을 때 한 칸씩 밀어서 저장.

 

 

덩어리 3.

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

할 일 : (x, y) 좌표가 주어질 때마다, y번 열 전체x번 행 전체 뒤집기.

- d[j][y] : y번 열을 위에서 아래로 훑으면서 반전

- d[x][j] : x번 행을 왼쪽에서 오른쪽으로 훑으면서 반전

if ~ 0이면 1, else 0 = 값을 뒤집는다. 는 뜻.

 

덩어리 4.

for i in range(1, 20) :
  for j in range(1, 20) :
    print(d[i][j], end=' ')
  print()

할 일 : 1번~19번 행, 1번~19번 열만 (0번은 무시) 한 줄씩 출력.

- 안쪽 for j : 한 행의 값들을 공백으로 구분. > 옆으로 쭉 출력.

- 바깥 for i : 한 행이 끝날 때마다 print()로 줄바꿈. > 다음 행으로 넘어감.