์ฌ์ ์ ์ต๋ ๊ณตํต ๋ถ๋ถ ์์ด (๋ฐฑ์ค 30805)
๋ ์์ด A, B์์ ๊ณตํต ๋ถ๋ถ ์์ด ์ค ์ฌ์ ์์ผ๋ก ๊ฐ์ฅ ํฐ ๊ฑธ ์ฐพ๋ ๋ฌธ์ .
ํต์ฌ์ ๊ทธ๋ฆฌ๋. ๋งค ๋จ๊ณ๋ง๋ค ํ์ฌ A์ B์ ๋จ์ ๊ตฌ๊ฐ์์ ๊ณตํต์ผ๋ก ๋ฑ์ฅํ๋ ์ ์ค ๊ฐ์ฅ ํฐ ์ ํ๋๋ฅผ ๊ณ ๋ฆ.
์ซ์ ๋ฒ์๊ฐ ์๊ธฐ ๋๋ฌธ์(1~100) ์ด๊ฒ ๊ฐ๋ฅํจ. ์ฐพ์ ์๋ ์ ๋ต ๋ฆฌ์คํธ์ ์ถ๊ฐํ๊ณ , ๋ค์ ํ์์ ๊ทธ ์ซ์ ์ดํ๋ถํฐ ๋ค์ ์์.
list.index(val, start)๋ก ํ์ ์์ ์ง์ ์ ์ ์งํ๋ฉด์ ๋ถ๋ถ ์์ด ์กฐ๊ฑด ์งํด. ์ฌ๋ผ์ด์ฑ์ ์ ์ฐ๊ณ ์ธ๋ฑ์ค๋ง ๋๊ฒจ์ ์ฑ๋ฅ ์ ์ง.
๋ ์ด์ ๊ณตํต๋๋ ์๋ฅผ ์ฐพ์ ์ ์์ผ๋ฉด ์ข ๋ฃ. ์ต์ข ์ ์ผ๋ก ์ ๋ต ์์ด ๊ธธ์ด์ ๊ฐ๋ค์ ์ถ๋ ฅํ๋ฉด ๋จ.
#์ต์ฅ๊ธธ์ด ๊ณตํต์์ด Longest Common Subsequence
import sys
input=sys.stdin.readline
def find_max_value(a,b,a_start_idx,b_start_idx):
max_val=-1
for a_num in a[a_start_idx:]:
for b_num in b[b_start_idx:]:
if a_num==b_num:
if a_num>max_val:
max_val=a_num
break
return max_val if max_val!=-1 else False
def find_max_common_subsequence(a,b):
a_start_idx=0
b_start_idx=0
answer=[]
while True:
max_common_value=find_max_value(a,b,a_start_idx,b_start_idx)
if not max_common_value:
break
answer.append(max_common_value)
a_start_idx=a.index(max_common_value,a_start_idx)+1
b_start_idx=b.index(max_common_value,b_start_idx)+1
return answer
def main():
n=int(input().strip())
a=list(map(int,input().split()))
m=int(input().strip())
b=list(map(int,input().split()))
answer=find_max_common_subsequence(a,b)
print(len(answer))
print(' '.join(map(str,answer)))
if __name__=="__main__":
main()
max_value ์ฐพ๊ณ ๊ทธ ๊ฐ ๊ธฐ์ค์ผ๋ก ๋ฆฌ์คํธ์ ๋ค ์์๋ง ๋ณด๊ฒ ํ๋ฉด์, ์ด๋ฅผ ๋ฐ๋ณตํ๊ธฐ๋ง ํ๋ฉด ๋๋ ๋ฌธ์ ์๋๋ฐ LCS ๊ตฌํ๋ ๋ฌธ์ ์ธ ์ค ์๊ณ ํท๊ฐ๋ ค์ ์ข ๋ง์ด ํค๋ฉค. ์์ด๋์ด ์ ๋ ์ค๋ฅด๋ฉด ๊ฝค๋ ์คํธ๋ ์ค ๋ฐ๋ ๋ฌธ์ .
'๐ Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| โ BOJ 2638 - BFS ์์ฉ (2) | 2025.07.17 |
|---|---|
| โ BOJ 14938 - N๋ฒ ๋ค์ต์คํธ๋ผ (1) | 2025.07.16 |
| โ BOJ 13172 - pow ์ฐ์ฐ (๋ถํ ์ ๋ณต ๊ฑฐ๋ญ์ ๊ณฑ, ๋ชจ๋๋ฌ ์ญ์) (1) | 2025.07.14 |
| โ BOJ 10830 - ํ๋ ฌ ์ ๊ณฑ (0) | 2025.07.12 |
| โ BOJ 12851 - BFS ๊ฐ์ง ์ ๋์ (1) | 2025.07.11 |