โ 1436 ์ํ๊ฐ๋ ์ โ
N = int(input())
cnt = 0
start = 666
while 1:
if '666' in str(start):
cnt += 1
if N == cnt:
print(start)
break
start+=1
else:
start+=1
๐ง๐ผ ๋ง ๊ทธ๋๋ก brutalํ๊ฒ ์ผ์ผ์ด ๋ชจ๋ ๊ฒฝ์ฐ์ ์์์ 666 ํฌํจ ์ฌ๋ถ๋ฅผ ๋ฐ์ง๋ ๋ฌธ์
→ ์ต์ํ์ ์๊ฐ ๋จ์ถ์ ์ํด break๋ฅผ ๋ฃ์๊ณ , 666๋ถํฐ ์์ํ๊ฒ ์ฝ๋ ์ค์
๐ง๐ผ ์์ ํ์ด๋ โ cnt ๋ณ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด 1๋ถํฐ ์ถ๊ฐํ๋ฉฐ ์ฒดํฌํ๋ ๊ตฌ์กฐ์ด๋, ์๋์ ํ์ด๋ โกN ์์ฒด์์ 1์ฉ ๊ฐ์ํ๋ฉฐ ์ฒดํฌํ๋ ๊ตฌ์กฐ
โป while N ํ์ด๊ฐ ์ ๋ฐํด์ ๊ฐ์ ธ์์ โป
N = int(input())
cnt = 0
start = 665
while N:
start += 1
if '666' in str(start):
N -= 1
print(start)
(๐ง๐ผ *์ฐธ๊ณ ) ๊ฐ๊ฐ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ง๋ค์ด brute-force์ ๋ฒ์๋ฅผ ์ต์ํ์ผ๋ก ์๋์ ํ์ด์ ๊ฐ์ด ๋ง๋ค ์๋ ์๋ค.)
import sys
N = int( sys.stdin.readline() )
num_list = [0] * 10000
cnt, num_cnt = 0, 0
# 5666, 6660~6669, 7666
# 65666, 66600~66699, 67666
# 665666, 666000~666999, 667666
# 6665666, 6660000~6669999, 6667666
while(1) :
num = int( str(num_cnt) + "666" )
if num_cnt % 10000 == 6666 :
for i in range(10000) :
num_list[cnt] = (num-6666) + i
cnt += 1
if cnt == N :
break
elif num_cnt % 1000 == 666 :
for i in range(1000) :
num_list[cnt] = (num-666) + i
cnt += 1
if cnt == N :
break
elif num_cnt % 100 == 66 :
for i in range(100) :
num_list[cnt] = (num-66) + i
cnt += 1
if cnt == N :
break
elif num_cnt % 10 == 6 :
for i in range(10) :
num_list[cnt] = (num-6) + i
cnt += 1
if cnt == N :
break
else :
num_list[cnt] = num
cnt += 1
if cnt == N :
print(num_list[cnt-1])
break
num_cnt += 1
โ 4673 ์ ํ ๋๋ฒ โ
๐ง๐ผ brute-force ๋ฌธ์ ๋ก ๋ชจ๋ ์ซ์๋ฅผ d(n)์ ๋๋ ค d(n)์ ํด๋น๋์ง ์๋ ์ ํ ๋๋ฒ๋ฅผ ์ผ์ผ์ด ๋ชจ๋ ์ถ๋ ฅํ๋ ๋ฌธ์
๐ง๐ผ list vs. set
→ d(n)์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ค ์๋ฃํ์ ์ ์ฅํ๋๊ฐ์ ๋ฐ๋ผ ์คํ์๊ฐ์ด ์ฒ์ฐจ๋ง๋ณ์ด ๋๋ค.
→ ์ต์ข ์ ์ผ๋ก in ์ฐ์ฐ์๋ก ์ค์ ํ ์๋ฃํ์ ์ํ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ์ง ํ์ธํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ค์
โ list์ in ์ฐ์ฐ์ - ์๊ฐ๋ณต์ก๋ $O(n)$
โก set์ in ์ฐ์ฐ์ - ์๊ฐ๋ณต์ก๋ $O(1)$
→ list๊ณผ tuple์ ํ๋ํ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ธํด์ผ ํ๋ฏ๋ก in ์ฐ์ฐ์์ $O(N)$์ด๋ผ๋ ์๊ฐ๋ณต์ก๋๊ฐ ๊ฑธ๋ฆฌ์ง๋ง, set๊ณผ dictionary๋ hash ๊ตฌ์กฐ๋ก ํ๊ท $O(1)$ time complexity
def d(n):
r=n
for i in list(str(n)):r+=int(i)
return r
s=set()
for n in range(1,10001):s.add(d(n))
for n in range(1,10001):
if n not in s:print(n)
→ ์์๋ ์๊ฐ์ด ์ฒ์ฐจ๋ง๋ณ! set์ด ํจ์ฌ ๋ ๋น ๋ฅด๋ค
โ 7568 ๋ฉ์น โ
N = int(input())
lst = []
for _ in range(N): #2 ≤ N ≤ 50
x, y = map(int, input().split())
lst.append((x,y)) #O(1)
for human in lst: #10 ≤ x, y ≤ 200 #O(n)
me = human
grade = 1
for others in lst: #O(n)
if others[0] > me[0] and others[1] > me[1]:
grade += 1
print(grade)
๐ง๐ผ ๊ฐ๊ฐ ๋ชจ๋ ์ฌ๋๋ค์ ๋๋ฉด์ ๋๋ณด๋ค ํค์ ๋ชธ๋ฌด๊ฒ๊ฐ ๋ชจ๋ ํฌ๋ค๋ฉด 1์ฉ ์ถ๊ฐํด ์ต์ข ํฉํ ๊ฒฐ๊ณผ์ธ ๋ฑ์๋ฅผ ๊ฐ ์ธ์๋ณ๋ก ์ญ ์ถ๋ ฅํด์ฃผ๋ฉด ๋!
โ 8892 ํฐ๋ฆฐ๋๋กฌ โ
โ itertools์ combinations๋ฅผ ํ์ฉํด ๊ฐ๋ฅํ ๋ word pair๋ฅผ ๋ชจ๋ ๊ตฌํ๊ณ , ์์ผ๋ก๋ ๋ค๋ก๋ ํฉ์ณ์ palindrome์ธ์ง ํ์ธํ๋ code
from itertools import combinations
import sys
input=sys.stdin.readline
def palindrome(word1, word2):
n1=word1+word2
n2=word2+word1
if n1 == n1[::-1]:return n1
elif n2 == n2[::-1]:return n2
else:return '0'
for _ in range(int(input())):
cnt = 0
words = [input().rstrip() for _ in range(int(input()))]
pairs = list(combinations(words, 2))
for pair in pairs:
res = palindrome(pair[0], pair[1])
if res.isdigit():cnt += 1
else:
print(res)
break
if cnt == len(pairs):
print(0)
โก ๋ for๋ฌธ์ ๋๋ฉด์ ๊ฐ๊ฐ์ index๋ฅผ ํ์ธํ๋ฉฐ indexing์ผ๋ก ๊ฐ word๋ฅผ ํฉ์น ๊ฒฐ๊ณผ๊ฐ palindrome์ธ์ง ํ์ธํ๋ code
import sys
def isPalindrome(word_a, word_b):
word = word_a + word_b
if word == word[::-1]:
print(word)
sys.exit(0)
if __name__ == "__main__":
t = int(input())
for _ in range(t):
k = int(input())
words = [sys.stdin.readline().rstrip() for _ in range(k)]
for i in range(k-1):
for j in range(i+1, k):
isPalindrome(words[i], words[j])
isPalindrome(words[j], words[i])
print("0")
โ 1065 ํ์ โ
N=int(input())
if N<100:print(N)
else:
cnt=99
for i in range(100,N+1):
l=list(map(int,str(i)))
if (l[0]-l[1])==(l[1]-l[2]):cnt+=1
print(cnt)
๐ง๐ผ 100๋ฏธ๋ง์ ์๋ ๋ชจ๋ ํ์์ ํด๋นํ๊ณ , 100์ด์์ผ ๊ฒฝ์ฐ ์ง์ ๋ฑ์ฐจ์์ด์ธ์ง ํ์ธํด ์ผ์ผ์ด ๊ฐ์ 1์ฉ ๋ํด์ฃผ๋ brute-force ์ ํ์ ์ธ ์ ํ
โ 1018 ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ โ
import sys
input = sys.stdin.readline
M,N=map(int,input().split())
chess = []
row1 = ['W','B','W','B','W','B','W','B']
row2 = ['B','W','B','W','B','W','B','W']
cmp1 = [row1,row2,row1,row2,row1,row2,row1,row2]
cmp2 = [row2,row1,row2,row1,row2,row1,row2,row1]
min_l = []
for _ in range(M):
chess.append(list(input()))
for a in range(M-7):
for b in range(N-7):
cnt1,cnt2=0,0
your_chess = []
for i in range(8):
row = []
for j in range(8):
row.append(chess[a+i][b+j])
your_chess.append(row)
for i in range(8):
for j in range(8):
if your_chess[i][j] != cmp1[i][j]:
cnt1 += 1
if your_chess[i][j] != cmp2[i][j]:
cnt2 += 1
min_l.append(min(cnt1,cnt2))
print(min(min_l))
๐ง๐ผ 2์ฐจ์ ๋ฐฐ์ด + ๋ธ๋ฃจํธ ํฌ์ค ์ ํ
๐ง๐ผ
โ ๋จผ์ ๋น๊ตํด์ผ๋ cmp1๊ณผ cmp2 ๋ฐฐ์ด์ 2์ฐจ์ ๋ฐฐ์ด๋ก ๋ง๋ค๊ธฐ
โก ๋ด 2์ฐจ์ ๋ฐฐ์ด์ chess์ ์ ๋ ฅํ๊ธฐ
โข Mํ N์ด์ chess์์ ์ฌ๋ฌ 8x8 ์ ์ฌ๊ฐํ ํฌ๊ธฐ์ chess๋ณ๋ก ๊ฐ๊ฐ ๋๋์ด ๋น๊ต๋ฅผ ํด์ผ ํ๋ค
→ ๋ for๋ฌธ์ ๋๋ ค 0~(M-8) / 0~(N-8)๊น์ง ์ ์ฌ๊ฐํ ์์์ ์ ๊ฐ๊ฐ ๋ค๋ฅด๊ฒ ๋์ด ๊ฐ ์ ์ฌ๊ฐํ ๋ณ๋ก cmp1๊ณผ cmp2๋ผ๋ฆฌ ๋น๊ต
โฃ cmp1๊ณผ cmp2 ๋น๊ตํ ๊ฒ ์ค ์ต์๊ฐ ์ฐพ์ list์ ๋ฃ์ด ์ต์ข ์ ์ผ๋ก list ์ต์๊ฐ ์ถ๋ ฅ
โ 1051 ์ซ์ ์ ์ฌ๊ฐํ โ
import sys
input=sys.stdin.readline
N,M=map(int,input().split())
arr=[]
for _ in range(N):
arr.append(list(map(int,input().rstrip())))
size=min(N,M) #initial square size
ans=0
flag=False
while 1:
for i in range(N-size+1):
for j in range(M-size+1):
if arr[i][j] == arr[i+size-1][j] == arr[i][j+size-1] == arr[i+size-1][j+size-1]:
ans = size*size
flag=True
break
if flag: break
size-=1
if size==0:break
if flag: break
print(ans)
๐ง๐ผ ์ ์ฒด์คํ ์น ํ๊ธฐ ๋ฌธ์ ์ ๋๊ฐ์ 2์ฐจ์ ๋ฐฐ์ด + BF ๋ฌธ์ ์ ํ์ด๋ค. i์ j ๊ฐ๋ก์ ์ธ๋ก index ๋ฒ์๋ฅผ ์ฃผ์ด์ง size ์ ์ฌ๊ฐํ์ ๋ง๊ฒ range()๋ฌธ์ ์ ์ธ์ฐ๊ณ , ์ ์ฌ๊ฐํ์ ์กฐ๊ฑด์ด ๋ง๋ค๋ฉด flag ๋ณ์๋ก break๋ฌธ์ ์ ์ ํ ๋ง๋ ๋ค.
๐ง๐ผ size๊ฐ 0์ผ ๊ฒฝ์ฐ index ์ค๋ฅ๊ฐ ์๊ธฐ๋ฏ๋ก indexerror๋ฅผ ํผํ๊ธฐ ์ํด break๋ฌธ ์ถ๊ฐ
๐ง๐ผ ์ฌ๋ฌ break๋ฌธ์ ์ค์ ํด์ผ ํ๋ ์ ํ!
โ 1120 ๋ฌธ์์ด โ
A,B=input().split()
ans=51
a,b=len(A),len(B)
cnt=b-a+1
for i in range(cnt):
x=0
y=0
for j in range(i,i+a):
if A[y]!=B[j]:
x+=1
y+=1
ans=min(ans,x)
print(ans)
๐ง๐ผ ๋ฌธ์์ด B๋ ๊ณ ์ ํ ์ฑ๋ก ๋ฌธ์์ด A๋ฅผ ์ฒซ ์์น๋ถํฐ ๊ฐ๋ฅ ๋ ์์น๊น์ง ๋ฐ๋ณต๋ฌธ
: ์ฐจ์ด๊ฐ ์ต์๊ฐ ๋์ด์ผ ํ๋ฏ๋ก A์ B๊ฐ์ ๋จ์ ์๋ฆฌ๋ ๋ชจ๋ ๊ฐ๊ฒ ์ค์
: ๋ฐ๋ณต๋ฌธ ๋๋ฉฐ A์ B ์ฌ์ด์ ์ฐจ์ด ๊ฐฏ์ ์ต์๊ฐ update
๐ง๐ผ + ์ด ๋ ๋ฌธ์์ด A์ index๋ ํญ์ 0๋ถํฐ ์์ํจ ์ฃผ์
โ 1543 ๋ฌธ์ ๊ฒ์ โ
paper=input()
word=input()
ans=0
j=0
while j<=(len(paper)-len(word)):
if paper[j:j+len(word)] == word:
ans+=1
j+=len(word)
else:
j+=1
print(ans)
๐ง๐ผ ์ผ์ผ์ด word์ ๋์ผํ ๋ฌธ์์ด while๋ฌธ ๋๋ฉด์ ์ฐพ์์ฃผ๊ธฐ
โ 1057 ํ ๋๋จผํธ โ
* ํ์ด 1) ์ ์ฒด ๋ผ์ด๋์ ์๋ฅผ log2๋ก ๊ตฌํ๊ณ ๊ฐ ๋ผ์ด๋์ ๋ฒํธ๋ฅผ ๋ชจ์ 2์ฐจ์ list ๊ตฌํ. ๋ผ์ด๋ ์งํํ๋ฉด์ list append. ๋ฒํธ๊ฐ ๊ฐ์ list์ ์์ ๋๊น์ง ์ ๊ฒ
import math,sys
n=int(math.log(100_000,2))
rounds=[[] for _ in range(n+1)]
N,a,b=map(int,input().split())
l=[i for i in range(1,N+1)]
rounds[0]=l
rnd=0
while 1:
for i in range(0,len(rounds[rnd]),2):
if i == len(rounds[rnd])-1: #ํ์์ผ ๊ฒฝ์ฐ ๋ง์ง๋ง ๋ฒํธ๋ ์๋ ๋ค์๋ผ์ด๋ ์ง์ถ
rounds[rnd+1].append(rounds[rnd][i])
else:
if rounds[rnd][i] not in [a,b] and rounds[rnd][i+1] not in [a,b]: #๋ ๋ค ์๋ค๋ฉด
rounds[rnd+1].append(rounds[rnd][i])
elif rounds[rnd][i] in [a,b] and rounds[rnd][i+1] in [a,b]: #๋ ๋ค ์๋ค๋ฉด ๋ต ๋ฐ๊ฒฌ!
print(rnd+1)
sys.exit()
elif rounds[rnd][i] in [a,b]: #์ ๋ฒํธ์ ๋๊ตฐ๊ฐ ์๋ค๋ฉด ์๋ฒํธ ์ฌ๋ผ๊ฐ๊ธฐ
rounds[rnd+1].append(rounds[rnd][i])
else:#๋ท ๋ฒํธ์ ์๋ค๋ฉด ๋ท๋ฒํธ ์ฌ๋ผ๊ฐ๊ธฐ
rounds[rnd+1].append(rounds[rnd][i+1])
rnd+=1
* ํ์ด 2) ๋ผ์ด๋๊ฐ ์งํ๋๋ฉด์ ์ง๋ฏผ๊ณผ ํ์์ ๋ฒํธ๊ฐ (n+1)//2์ฉ ๋ณํจ. ์๋ก ๊ฐ์์ง ๋ ๋ผ์ด๋ ์ ์ถ๋ ฅ
N,a,b=map(int,input().split())
ans=0
while (a!=b):
a,b=(a+1)//2,(b+1)//2
ans+=1
print(ans)
โ 1969 DNA โ
import sys
input = sys.stdin.readline
N,M=map(int,input().split())
freq=[[0,0,0,0] for _ in range(M)] #ACGT
for _ in range(N):
DNA=input().rstrip()
i=0
for nct in list(DNA):
idx='ACGT'.index(nct)
freq[i][idx]+=1
i+=1
HD=0
ans=[]
for freq_pair in freq:
ans.append('ACGT'[freq_pair.index(max(freq_pair))])
HD+=(N-max(freq_pair))
print(*ans,sep='')
print(HD)
๐ง๐ผ ๊ฐ ์๋ฆฌ๋ณ Hamming Distance์ ํฉ์ด ๊ฐ์ฅ ์์ ๋ดํด๋ ์คํ์ด๋๋ ์ต๋๋น๋ ๋ดํด๋ ์คํ์ด๋(์ฌ์ ์)
๐ง๐ผ Hamming Distance๋ ๊ฐ ์๋ฆฌ๋ณ ์ ์ฒด ๋ดํด๋ ์คํ์ด๋์ ๊ฐ์ - ์ต๋๋น๋ ๋ดํด๋ ์คํ์ด๋์ ๋น๋์์ ๋์ ํฉ
๐ง๐ผ ๋ฌธ์์ด ACGT(์ํ๋ฒณ์)์ indexing
โ 23428 Painting Roofs โ
import sys
input=sys.stdin.readline
m,n=map(int,input().split())
a,b=0,0
arr=[]
for _ in range(m):
arr.append(list(input().rstrip()))
for i in range(m):
if i%2==0:
flag=True
for x in arr[i]:
if flag: #'2'
if x == '1': a+=1
flag=False
else:
flag = True
if x == '2': a+=1
else:
flag=True
for x in arr[i]:
if flag:
if x == '2': a+=1
flag=False
else:
flag = True
if x == '1': a+=1
for i in range(m):
if i%2==0:
flag=True
for x in arr[i]:
if flag: #'2'
if x == '2': b+=1
flag=False
else:
flag = True
if x == '1': b+=1
else:
flag=True
for x in arr[i]:
if flag:
if x == '1': b+=1
flag=False
else:
flag = True
if x == '2': b+=1
print(min(a,b))
๐ง๐ผ 1๊ณผ 2๊ฐ ๋ฒ๊ฐ์ ๋์ค๋ 2๊ฐ์ง ์ผ์ด์ค์ ๋ฌด๋ฌ ๊ฐ๊ฐ์์ brute-force๋ก ๋ฐ๊ฟ์ผ ํ๋ ๊ฐ์ ๊ตฌํ๊ณ , ๋ ์ผ์ด์ค ์ค ์ต์๊ฐ ์ถ๋ ฅ
โ 2993 ์ธ ๋ถ๋ถ โ
import sys
input=sys.stdin.readline
word=input().rstrip()
ans=[]
for x in range(1,len(word)):
for y in range(x+1,len(word)):
str1,str2,str3=word[:x],word[x:y],word[y:]
ans.append(str1[::-1]+str2[::-1]+str3[::-1])
print(sorted(ans)[0])
๐ง๐ผ ์ธ ๋ถ๋ถ์ผ๋ก ๋์ฌ ์ ์๋ ์ผ์ด์ค๋ฅผ ์ง์ 2์ค for๋ฌธ์ผ๋ก ๋๋ฆฌ๋ฉด์ ์ฐพ๋๋ค. ๊ธธ์ด๋ 50๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฏ๋ก ์ถฉ๋ถํ ์ ํ ์๊ฐ ๋ด์ ํด๊ฒฐ ๊ฐ๋ฅ. ์ํ๋ฒณ ์์๋ sorted() ํจ์๋ก ํ ๋ฒ์ ํด๊ฒฐ
โ 1251 ๋จ์ด ๋๋๊ธฐ โ
๐ง๐ผ ์ <2993 ์ธ ๋ถ๋ถ> ๊ณผ ๋์ผ ๋ฌธ์
'BOJ > ๐ฅ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โ Binary Search Intermediate I - 9 Solvedโ (0) | 2022.12.07 |
---|---|
โ Greedy Intermediate I - 20 Solvedโ (0) | 2022.12.05 |
โ Implementation&Simulation Intermediate I - 20 Solvedโ (0) | 2022.11.28 |
โ Math & Geometry Intermediate I - 13 Solvedโ (0) | 2022.11.22 |
โ Sorting Intermediate I - 18 Solvedโ (0) | 2022.11.20 |
๋๊ธ