[BaekJoon] λ°±μ€€ 1074번 : Z

Updated:

1074번 : Z

Z1
Z2


μ˜ˆμ „μ— ν•œ 번 도전을 ν–ˆλ‹€κ°€ 정말 μ–΄λ €μ›Œ 풀지 λͺ» ν–ˆλ˜ λ¬Έμ œμ˜€λ‹€.

μ²˜μŒμ— ν’€μ—ˆμ„ λ•ŒλŠ” μž¬κ·€λ₯Ό μ΄μš©ν•΄ ν’€μ—ˆλ‹€. μœ„ μ˜ˆμ‹œμ²˜λŸΌ 2x2 배열이 될 λ•Œ κΉŒμ§€ μͺΌκ°  λ’€ (r, c) κΉŒμ§€ μ­‰ κ°€λŠ” 것 이닀.


def visit_arr(width, i, j):
	global count

	if width == 2:
		dirs = [[0, 0], [0, 1], [1, 0], [1, 1]]
		for cur in dirs:
			if [i + cur[0], j + cur[1]] == [r, c]:
				return
			count += 1

		return

	visit_arr(width // 2, i, j)  # μ’Œμƒ μ‹œμž‘ μ’Œν‘œ
	visit_arr(width // 2, i, j + width // 2)  # μš°μƒ μ‹œμž‘ μ’Œν‘œ
	visit_arr(width // 2, i + width // 2, j)  # μ’Œν•˜ μ‹œμž‘ μ’Œν‘œ
	visit_arr(width // 2, i + width // 2, j + width // 2)  # μš°ν•˜ μ‹œμž‘ μ’Œν‘œ


N, r, c = map(int, input().split())
count = 0
visit_arr(2 ** N, 0, 0)
print(count)

ν•˜μ§€λ§Œ μ‹œκ°„μ΄ˆκ³Όκ°€ λ°œμƒν–ˆλ‹€. λΆ„λͺ…νžˆ 풀이 λ°©λ²•λŒ€λ‘œ ν’€μ—ˆλŠ”λ° μ‹œκ°„μ΄ˆκ³Όκ°€ λ‚˜μ˜€λ‹ˆ λ„ˆλ¬΄λ„ˆλ¬΄ μ§œμ¦λ‚¬λ‹€..

λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ 올린 μ§ˆλ¬Έλ“€μ„ λ΄€λŠ”λ° 맞긴 ν•˜μ§€λ§Œ ꡉμž₯히 λΉ„νš¨μœ¨μ μΈ λ°©λ²•μ΄μ—ˆλ‹€.

λ‚΄κ°€ κ°€κ³ μž ν•˜λŠ” (r, c) 이 μ–΄λ–€ 사뢄면에 μžˆλŠ”μ§€λ§Œ μ•ˆλ‹€λ©΄ λ‚˜λ¨Έμ§€λŠ” 방문을 ꡳ이 ν•  ν•„μš”κ°€ μ—†λ‹€.


N, r, c = map(int, input().split())
count = 0

while True:
	width = 2 ** (N - 1)

	if width == 1:
		if [r, c] == [0, 1]:
			count += 1
		elif [r, c] == [1, 0]:
			count += 2
		elif [r, c] == [1, 1]:
			count += 3
		break

	if r < width <= c:  # 2사뢄면
		count += width ** 2
		c -= width
	elif c < width <= r:  # 3사뢄면
		count += width ** 2 * 2
		r -= width
	elif r >= width and c >= width:  #4사뢄면
		count += width ** 2 * 3
		r -= width
		c -= width

	N -= 1

print(count)

index 가지고 μˆ˜ν•™ 놀이 ν•˜λŠ” λ¬Έμ œκ°€ 제일 μ–΄λ ΅κ³  제일 μ§œμ¦λ‚œλ‹€..

ν•˜μ§€λ§Œ 계속 ν’€μ–΄μ•Ό ν•œλ‹€..



Categories:

Updated:

Leave a comment