โ 2564 ๊ฒฝ๋น์ โ
import sys
input=sys.stdin.readline
w,h=map(int,input().split())
diameter = (w+h)*2
loc=[]
ans=0
for _ in range(int(input())):
d,l=map(int,input().split())
if d == 3:
loc.append(l)
elif d == 2:
loc.append(l+h)
elif d == 4:
loc.append(h*2+w-l)
else: #d==1
loc.append(h*2+w*2-l)
d,l=map(int,input().split())
if d == 3:
me = l
elif d == 2:
me = l+h
elif d == 4:
me = h*2+w-l
else: #d==1
me = h*2+w*2-l
for x in loc:
if abs(me-x) <= (diameter//2):
ans+=(abs(me-x))
else:
ans+=(diameter-abs(me-x))
print(ans)
๐ฆ ๊ตฌํ์ ์ํ ์์ด๋์ด๊ฐ ํ์ํ ๋ฌธ์ . ์ฌ๊ฐํ ๋ด๋ถ๊ฐ ์๋ ์ ๊ฒฝ๊ณ๋ก๋ง ์ด๋ํ ์ ์์ผ๋ฏ๋ก 4๊ฐ์ ์ ์ ํ ์ค๋ก ๋ฐ๊พธ์ด ๋/์/๋จ/๋ถ ๋ฐฉํญ๋ณ ๊ธฐ์ค์ ์ ์์ ๊ฐ์ด ํ์ดํ๋ก ํ์. ๊ฐ ์์ ์ ์์น๋ฅผ ์์ ์ผ์ง์ ์ผ์ชฝ ๋ ๊ธฐ์ค์ผ๋ก๋ถํฐ ๋จ์ด์ง ๊ฑฐ๋ฆฌ๋ก ํ์. ๋๊ทผ์ด ์ญ์ ์ผ์ชฝ ๋ ๊ธฐ์ค ๋จ์ด์ง ๊ฑฐ๋ฆฌ๋ก ํ์ํ๊ณ , ๋๊ทผ์ด์ ์์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ๋๊ฐ์ผ๋ก ํ์. ์ ์ฒด ๊ธธ์ด์ ์ ๋ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค๋ฉด ๋ฐ๋ก ์ต๋จ๊ฑฐ๋ฆฌ์ ๋์ ์ผ๋ก ํฉํ๊ธฐ. ๋ง์ฝ ํฌ๋ค๋ฉด ์ ์ฒด ๊ธธ์ด์ ํด๋น ๊ฑฐ๋ฆฌ๋ฅผ ๋บ ๋๋จธ์ง๋ฅผ ์ต๋จ๊ฑฐ๋ฆฌ์ ๋์ ์ผ๋ก ํฉํ๊ธฐ.
โ 5525 IOIOI โ
import sys
input=sys.stdin.readline
N=int(input())
M=int(input())
S=input()
numbers=[]
i=0
add=0
ans=0
while i < (M-2):
if S[i:i+3] == 'IOI':
add+=1
i+=2
if N==add:
ans+=1
add-=1
else:
add=0
i+=1
print(ans)
๐ป P1๋ถํฐ ์ฐจ๋ก๋๋ก ๋ฌธ์์ด P์ ํน์ง์ ํ์ธํ๋ฉด, IOI์ ๋ฐ๋ณต์์ ์ ์ ์๋ค. ์ฌ๊ธฐ์ IOI๊ฐ ๋๋๊ณ ๋ง์ง๋ง I์ ์๋ฆฌ์์ ๋ค์ I๊ฐ ๊ฒน์น ์ฑ๋ก IOI๊ฐ ๋ฐ๋ณต๋๋ ํํ. ๋ฐ๋ผ์, IOI๋ฅผ ๋ฐ๊ฒฌํ๋ค๋ฉด, traversing element i๋ฅผ 2๋ก ์ฆ๊ฐ์ํค๊ณ IOI ๊ณ์ ๊ฒ์ฌ → IOI๊ฐ ์๋๋ผ๋ฉด ์ฐ์๊ฐ์ add 0์ผ๋ก ์ด๊ธฐํ / ๋ง๋ค๋ฉด add 1 ์ฆ๊ฐํ๋ฉด์ ๋ด๊ฐ ์ํ๋ P์ธ์ง N==add ์กฐ๊ฑด์ผ๋ก ํ์ธํ๋ค / ์ด ๋, IOIOI๋ก ์ํ๋ P๋ฅผ ๋ฐ๊ฒฌํ๋ค๋ฉด ๊ฒน์น ์ํ๋ก IOIOIOI์ ๊ตต์ ๋ถ๋ถ๋ ์ํ๋ P์ด๋ฏ๋ก ์ฐ์๊ฐ์ add๋ฅผ 1๋ง ๋บ ๋ค์ ๊ณ์ํด์ IOI ์ ๊ฒ (๋ณ๋๋ก ๋์ ๋ณ์๋ฅผ ๋ง๋ค๊ณ ๊ฒน์น ์ผ์ด์ค๋ฅผ ์๊ฐํด -1 ํด์ฃผ๋ idea ํ์)
+ ์๋๋ฉด IOI์ ๊ท์น์ฑ์ ์ด์ฉํ ํ์ด๊ฐ ์๋, IO๋ฅผ ์ด์ฉํด์ ์๋์ ๊ฐ์ด ํ ์ ์๋ค. P1์ P2์์ 2๊ฐ๊ฐ ์กด์ฌ, P1์ P3์์ 3๊ฐ๊ฐ ์กด์ฌ .. ์ ์ฑ์ง์ ์ด์ฉ: โ ์ฃผ์ด์ง ๋ฌธ์์ด์ Px ๋ฌธ์์ด ํํฉ์ ๊ตฌํ๋ค / โก N์ ๋ฐ๋ผ ๋ชจ๋ Px ๋ฌธ์์ด ๋ด์ ๋ค์ด ์๋ PN์ ๊ฐ์๋ฅผ ๊ตฌํ๋ฉด ๋!
: ์ฆ, ์ํฉ์ ๋ฐ๋ผ ๋ค์ํ ์์ด๋์ด ์ด์ฉ์ด ๊ฐ๋ฅํ ๋ฌธ์ . index๋ฅผ ์์ ๋กญ๊ฒ ์ ํํ๋ ค๋ฉด for๋ฌธ๋ณด๋ค๋ while๋ฌธ ์ถ์ฒ (์๋๋ for๋ฌธ ํ์ด ์ฐธ์กฐ)
import sys
input=sys.stdin.readline
N=int(input())
M=int(input())
S=input()
numbers=[]
is_consecutive=False
flag=False
i=0
add=0
ans=0
for i in range(M):
if flag and (i != M-1):
flag=False
continue
if S[i:i+2]=='IO':
if is_consecutive: #์ฐ์ํด์ ๋ํ๊ณ ์๋ ์ค์ด๋ผ๋ฉด
add+=1
flag=True
else: #์ฐ์ํด์ ๋ํด์ง๋ ์ง ์ฐพ๊ธฐ ์ํ ์ฒซ ์์์ ์ด๋ผ๋ฉด
is_consecutive=True
flag=True
add=1
else:
if is_consecutive: #์ข
์ ๊น์ง ์ฐ์ํด์ง ๋ฌธ์์ด ๋ํ๋ค๋ฉด
is_consecutive = False
if S[i] == 'O': numbers.append(add-1)
else:numbers.append(add)
add=0
for number in numbers:
if number >= N:
ans+=(number-N+1)
print(ans)
โ 30446 ํ๋ฌธ์ โ
import math
n=int(input())
length=len(str(n))
ans=0
#1 add up before length
for x in range(1,length):
ans+=((10**(math.ceil(x/2)-1))*9)
#2 adding the current length
#(1) if length odd
if length%2==1:
if length == 1:
ans+=n
else:
front=int(str(n)[:(length//2)])
#<1> front before add up
front_start=int('1'+'0'*(len(str(front))-1))
front_end=front-1
ans+=((front_end-front_start)+1)*10
#<2> middle add up
middle=int(str(n)[(length//2)])
if middle > 0:
ans+=(middle)
#<3> current add up
current=int(str(front)+str(middle)+str(front)[::-1])
if current <= n:
ans += 1
else: #(2) if length even
front=int(str(n)[:(length//2)])
#<1> front before add up
front_start=int('1'+'0'*(len(str(front))-1))
front_end=front-1
ans+=((front_end-front_start)+1)
#<2> current add up
current=int(str(front)+str(front)[::-1])
if current <= n:
ans += 1
print(ans)
๐ป ์ซ์๋ก ๊ตฌ์ฑ๋ ํ๋ฌธ์์ ํน์ง์ ํ์ฉ
โ N์๋ฆฌ ์์์ 1์๋ฆฌ์์ N-1์๋ฆฌ ์๊น์ง, ๊ฐ๊ฐ์ ์๋ฆฌ์์ ํ๋ฌธ์ ๊ฐ์ ๋์ ๋ํ๊ธฐ
(์ด ๋ ํ ์๋ฆฌ์๋ ํ๋ฌธ์ ๊ฐ์๊ฐ 9๊ฐ, ๋ ์๋ฆฌ์๋ 9๊ฐ, ์ธ ์๋ฆฌ ์๋ 90, ๋ค ์๋ฆฌ ์๋ 90, ๋ค์ฏ ์๋ฆฌ์๋ 900, ์ฌ์ฏ ์๋ฆฌ ์๋ 900 ~ ๊ท์น ํ์ฉ)
โก N์๋ฆฌ ์์์์ ํ๋ฌธ์ ๊ฐ์ ๊ตฌํ๊ธฐ
(1) N์ด ์ง์์ผ ๊ฒฝ์ฐ, ์๋ฅผ ๋ค์ด 123321์ด๋ผ๋ฉด ์ ๋ฐ์ผ๋ก ์๋ผ <1> 100 ~ 122 ๊น์ง์ ๊ฐ์ + <2> 123์ผ ๊ฒฝ์ฐ ๋ค๋ 321์ธ ์๊ฐ ํ์ฌ ์๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค๋ฉด 1 ์ถ๊ฐ
(2) N์ด ํ์์ผ ๊ฒฝ์ฐ, ์๋ฅผ ๋ค์ด 1234321์ด๋ผ๋ฉด ์ ๋ฐ์ผ๋ก ์๋ผ front - middle ํ ์๋ฆฌ - end๋ก ๋๋์์ ๋ front์ธ 123์ธ ๊ฒฝ์ฐ <1> (100 ~ 122 ๊น์ง์ ๊ฐ์) * 10 (middle์ด 0 ~ 9์ธ case ๋ชจ๋ ํด๋นํ๋ฏ๋ก) + <2> front๊ฐ 123์ธ ๊ฒฝ์ฐ middle ํ ์๋ฆฌ๊ฐ 0๋ณด๋ค ํด ๋ middle ๋ํ๊ธฐ (ex) 123์ด front์ด๊ณ middle์ด 0, 1, 2, 3 ์ด๋ผ๋ฉด 4๊ฐ case ๋ชจ๋ ํด๋น) + <3> front๊ฐ 123์ด๊ณ middle๋ ํ์ฌ middle 4๋ผ๋ฉด ๋ค๋ front๋ฅผ ๋ค์ง์ 321์ ๋ถ์ธ ์๊ฐ ํ์ฌ ์๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค๋ฉด 1 ์ถ๊ฐ
(์ด ๋ N์ด 1์ผ ๊ฒฝ์ฐ๋ง ์ ์ธ. N์ด 1์ผ ๊ฒฝ์ฐ๋ ํด๋น ์ ๊ทธ๋๋ก ์ถ๋ ฅ)
→ ์ง์ ์๋ฆฌ / ํ์ ์๋ฆฌ ๋๋์ด์ ๊ฐ๊ฐ ๊ฒฝ์ฐ์ ์ ๋๋์ด ๋ํ๊ธฐ
'BOJ > ๐ฅ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โ Backtracking Upper-Intermediate I - 9 Solvedโ (0) | 2024.01.20 |
---|---|
โ Backtracking Intermediate I - 10 Solvedโ (0) | 2024.01.18 |
โ Tree Upper-Intermediate I - 3 Solvedโ (0) | 2023.12.19 |
โ BF Upper-Intermediate I - 2 Solvedโ (0) | 2023.10.26 |
โ Greedy Intermediate II - 11 Solvedโ (0) | 2023.08.20 |
๋๊ธ