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()로 줄바꿈. > 다음 행으로 넘어감.
