[WEEK01] 10일차 연산자 끼워넣기

kozi·2023년 3월 8일
0

SW사관학교 정글

목록 보기
7/33

헷갈리기 쉬운 연산자

a = 10.5 / 3
b = int(10.5 / 3)
c = -10.5 / 3
d = int(-10.5 / 3)
e = 10.5 // 3
f = int(10.5 // 3)
g = -10.5 // 3
h = int(-10.5 // 3)

print(a, b, c, d, e, f, g, h)

>>> 3.5 3 -3.5 -3 3.0 3 -4.0 -4

연산자 끼워넣기

순열을 사용해서 푸는 방식과 dfs를 사용하는 방식이 있는데
dfs 방식이 더 효율적인듯 하다.
문제 조건에 "음수를 양수로 나눌 때는 C++14의 기준을 따른다. 즉, 양수로 바꾼 뒤 몫을 취하고, 그 몫을 음수로 바꾼 것과 같다."
라고 나와있는데 int(a/b) 형태로 처리하면 된다.

Z

위 그림처럼 좌표가 2배 증가하면 해당 좌표에 있는 값이 4배가 되는 규칙이 있다.
그래서 특정 좌표 값을 찾기 위해서는 그 좌표 값을 2로 나눠서 나온 값에 4를 곱하는 방법을 사용하면 된다.
예를 들어 (4, 4)의 값을 찾고 싶다.
그러면 좌표를 2로 나눠서 (2, 2)의 값인 12를 찾는다. 여기에 4를 곱하면 48.
이걸 반복적으로 하면 (1, 1)인 3을 4배 곱하고 또 4배 곱하면 찾으려던 값인 48을 찾을 수 있다.

그리고 작은 Z 안에서의 위치에 따라 다음 값을 더해준다.
2*(행을 2로 나눈 나머지) + (열을 2로 나눈 나머지)
(0, 0) -> + 0
(0, 1) -> + 1
(1, 0) -> + 2
(1, 1) -> + 3

2*(행%2) + (열%2) + 4*재귀(N-1, 행/2, 열/2)

위 식을 재귀호출을 사용해서 풀면 답이 나온다.

그림을 보면서 이해하면 조금 더 이해가 쉬워진다.

A+B - 4

브론즈5 문제를 풀다가 발견했다.

입력 개수가 정해져있지 않기 때문에

try except 구문을 사용하는 방법으로 해결했다.

1.
try:
	while 1:
    	~~
except:
	exit()
    
2.
while 1:
	try:
    	~~
	except:
    	break(또는 exit())

2가지 방법 모두 가능하다.
2번에서는 break 또는 exit() 둘 다 사용 가능하다.

profile
어제보다 잘하고 싶은 개발자 Kozi 입니다.

0개의 댓글