728x90
λ°˜μ‘ν˜•

문제 😡‍πŸ’«

ν•˜λ‚˜ μ΄μƒμ˜ μ—°μ†λœ μ†Œμˆ˜μ˜ ν•©μœΌλ‘œ λ‚˜νƒ€λ‚Ό 수 μžˆλŠ” μžμ—°μˆ˜λ“€μ΄ μžˆλ‹€. λͺ‡κ°€μ§€ μžμ—°μˆ˜μ˜ 예λ₯Ό λ“€μ–΄ 보면 λ‹€μŒκ³Ό κ°™λ‹€.

  • 3: 3(ν•œ 가지)
  • 41 : 2+3+4+7+11+13 = 11+13+17 = 41(μ„Έ 가지)
  • 53 : 5+7+11+13+17 = 53(두 가지)

ν•˜μ§€λ§Œ μ—°μ†λœ μ†Œμˆ˜μ˜ ν•©μœΌλ‘œ λ‚˜νƒ€λ‚Ό 수 μ—†λŠ” μžμ—°μˆ˜λ“€λ„ μžˆλŠ”λ°, 20이 κ·Έ μ˜ˆμ΄λ‹€. 7+13을 κ³„μ‚°ν•˜λ©΄ 20이 λ˜κΈ°λŠ” ν•˜λ‚˜ 7κ³Ό 13이 연속이 μ•„λ‹ˆκΈ°μ— μ ν•©ν•œ ν‘œν˜„μ΄ μ•„λ‹ˆλ‹€. λ˜ν•œ ν•œ μ†Œμˆ˜λŠ” λ°˜λ“œμ‹œ ν•œ 번만 λ§μ…ˆμ— μ‚¬μš©λ  수 있기 λ•Œλ¬Έμ—, 3+5+5+7κ³Ό 같은 ν‘œν˜„λ„ μ ν•©ν•˜μ§€ μ•Šλ‹€. 

μžμ—°μˆ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 이 μžμ—°μˆ˜λ₯Ό μ—°μ†λœ μ†Œμˆ˜μ˜ ν•©μœΌλ‘œ λ‚˜νƒ€λ‚Ό 수 μžˆλŠ” 경우의 수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

λ‚΄ ν’€πŸ¦·

# 1644. μ†Œμˆ˜μ˜ 연속합

import sys
input = sys.stdin.readline

N = int(input())
prime = []
arr = [True for _ in range(N+1)] 
arr[0] = arr[1] = False
for i in range(2, N+1):
    if arr[i]:
        prime.append(i)
        # i의 2λ°° 이상 λΆ€ν„°λŠ” λ‹€ false...
        for j in range(2*i, N+1, i):
            arr[j] = False

result = start = end = 0
while end <= len(prime):
    each = sum(prime[start:end])
    if each == N:
        result += 1
        end += 1
    elif each < N:
        end += 1
    else:
        start += 1
print(result)

κ³¨λ“œ 3 μš”λŸ‰ν•˜κ³ λŠ” μ—„μ²­ μ–΄λ €μš΄ λ¬Έμ œλŠ” μ•„λ‹ˆμ§€λ§Œ 비ꡐ적 λΉ λ₯Έ μ‹œκ°„μ— μ†Œμˆ˜λ₯Ό κ΅¬ν•˜κ³  또 νˆ¬ν¬μΈν„°λ₯Ό 써야 ν•˜κΈ° 땨문에 두가지 μ•Œκ³ λ¦¬μ¦˜ κ°œλ…μ„ μ•Œκ³  μžˆμ–΄μ•Ό ν•œλ‹€... κ·Έλž˜μ„œ 이거전에 ν’€ 문제둜 μ†Œμˆ˜ κ΅¬ν•˜λŠ” 문제 μΆ”μ²œν•œλ‹€!!!!

 

μ°Έκ³ ν•˜λ©΄ 쒋을 κ°œλ…λ“€ ✍️

  • μ—λΌν† μŠ€ ν…Œλ„€μŠ€μ˜ 체(μ†Œμˆ˜ νŒλ³„ μ•Œκ³ λ¦¬μ¦˜ : μ†Œμˆ˜λ“€μ„ λŒ€λŸ‰μœΌλ‘œ λΉ λ₯΄κ³  μ •ν™•ν•˜κ²Œ κ΅¬ν˜„ν•  수 μžˆλ‹€)
// μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체λ₯Ό μ‚¬μš©ν•˜μ—¬ μ†Œμˆ˜ κ΅¬ν•˜κΈ°

// 주어진 λ²”μœ„ 내에 μžˆλŠ” 각 μˆ«μžμ— λŒ€ν•΄ μ΄ˆκΈ°μ—λŠ” λͺ¨λ‘ True인 리슀트λ₯Ό μƒμ„±ν•œλ‹€
arr = [True for _ in range(N+1)] 
// 0κ³Ό 1은 μ†Œμˆ˜κ°€ μ•„λ‹ˆλ―€λ‘œ False둜 값을 μ„€μ •ν•œλ‹€
arr[0] = arr[1] = False
// 2λΆ€ν„° NκΉŒμ§€μ˜ 각 μˆ«μžμ— λŒ€ν•΄ μ†Œμˆ˜μΈμ§€ νŒλ³„ν•œλ‹€
for i in range(2, N+1):
	// ν˜„μž¬ μˆ«μžκ°€ μ†Œμˆ˜μΈ 경우, ν•΄λ‹Ή 숫자λ₯Ό μ†Œμˆ˜ λͺ©λ‘μ— μΆ”κ°€ν•˜κ³ ,,,
    // ν˜„μž¬ 숫자의 λ°°μˆ˜λ“€μ„ λͺ¨λ‘ False둜 μ„€μ •ν•œλ‹€... (적어도 iλ₯Ό ν¬ν•¨ν•˜λ‹ˆκΉŒ μ†Œμˆ˜κ°€ μ•„λ‹ˆλ‹€)
    if arr[i]:
        prime.append(i)
        # i의 2λ°° 이상 λΆ€ν„°λŠ” λ‹€ false...
        for j in range(2*i, N+1, i):
            arr[j] = False

 

  • 투 포인터 (λ¦¬μŠ€νŠΈμ— 순차적으둜 μ ‘κ·Όν•΄μ•Ό ν•  λ•Œ 두 개의 점의 μœ„μΉ˜λ₯Ό κΈ°λ‘ν•˜λ©΄μ„œ μ²˜λ¦¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜ ex) νŠΉμ •ν•œ 합을 κ°€μ§€λŠ” λΆ€λΆ„ 연속 μˆ˜μ—΄ μ°ΎκΈ° )
// 투 포인터 κ΅¬ν˜„ν•˜κΈ°

// λ‹€ λ”ν–ˆμ„ 경우 N이 λ˜λŠ” 결과와 μ‹œμž‘, 끝 점을 0으둜 μ΄ˆκΈ°ν™”
result = start = end = 0
// 끝 포인터가 μ†Œμˆ˜μ˜ 길이보닀 μž‘μ„œλ‚˜ 같은 λ™μ•ˆ μˆ˜ν–‰
while end <= len(prime):
	// ν˜„μž¬ μ‹œμž‘λΆ€ν„° κΈ‘κ°€μ§€μ˜ μ†Œμˆ˜ 합을 계산
    each = sum(prime[start:end])
    // 합이 Nκ³Ό κ°™λ‹€λ©΄ κ²°κ³Όλ₯Ό 1 증가, 끝 포인터 λ˜ν•œ 1 증가
    if each == N:
        result += 1
        end += 1
    // 합이 N보닀 μž‘λ‹€λ©΄ 끝 포인터 1 증가
    elif each < N:
        end += 1
    // 합이 N보닀 크닀면 μ‹œμž‘ 포인터 1 증가
    else:
        start += 1
728x90
λ°˜μ‘ν˜•
728x90
λ°˜μ‘ν˜•

문제 😡‍πŸ’«

독일 λ‘œλ˜λŠ” {1, 2,...,49}μ—μ„œ 수 6개λ₯Ό κ³ λ₯Έλ‹€.

둜또 번호λ₯Ό μ„ νƒν•˜λŠ”λ° μ‚¬μš©λ˜λŠ” κ°€μž₯ 유λͺ…ν•œ μ „λž΅μ€ 49가지 수 쀑 k(k>6)개의 수λ₯Ό 골라 집합 Sλ₯Ό λ§Œλ“  λ‹€μŒ κ·Έ 수만 가지고 번호λ₯Ό μ„ νƒν•˜λŠ” 것이닀.

예λ₯Ό λ“€μ–΄, k=8, S={1, 2, 3, 5, 8, 13, 21, 34}인 경우 이 집합 Sμ—μ„œ 수λ₯Ό κ³ λ₯Ό 수 μžˆλŠ” 경우의 μˆ˜λŠ” 총 28가지이닀.

{[1, 2, 3, 5, 8, 13], [1, 2, 3, 5, 8, 21], [1,2,3,5,8,34], ..., [3,5,8,13,21,34])

집합 S와 kκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 수λ₯Ό κ³ λ₯΄λŠ” λͺ¨λ“  방법을 κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨γ…‡μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

μž…λ ₯

μž…λ ₯은 μ—¬λŸ¬ 개의 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ‘œ 이루어져 이싿. 각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” ν•œ μ€„λ‘œ 이루어져 μžˆλ‹€, 첫 번째 μˆ˜λŠ” k(6 < k < 13)이고, λ‹€μŒ k개 μˆ˜λŠ” 집합 S에 ν¬ν•¨λ˜λŠ” μˆ˜μ΄λ‹€. S의 μ›μ†ŒλŠ” μ˜€λ¦„μ°¨μˆœμœΌλ‘œ 주어진닀.

μž…λ ₯의 λ§ˆμ§€λ§‰ μ€„μ—λŠ” 0이 ν•˜λ‚˜ 주어진닀.

 

좜λ ₯

각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ§ˆλ‹€ 수λ₯Ό κ³ λ₯΄λŠ” λͺ¨λ“  방법을 좜λ ₯ν•œλ‹€. μ΄λ•Œ, 사전 순으둜 좜λ ₯ν•œλ‹€.

각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μ‚¬μ΄μ—λŠ” 빈 쀄을 ν•˜λ‚˜ 좜λ ₯ν•œλ‹€.

 

λ‚΄ ν’€πŸ¦·

# 6603. 둜또
def backtracking(depth, beginwith):
    if depth == 6:
        print(*result)
        return

    for i in range(beginwith, k):
        if not visited[i]:
            result[depth] = nums[i]
            backtracking(depth+1, i+1)
            visited[i] = False


while True:
    lotto = list(map(int, input().split()))
    k = lotto[0]
    nums = lotto[1:]
    result = [0] * 6
    visited = [False] * k
    backtracking(0, 0) // 깊이, μ–΄λ””μ„œ λΆ€ν„° μ‹œμž‘ν• κ±΄μ§€

    if k == 0:
        quit()
    print()

 

Nκ³Ό M으둜 닀진 λ°±νŠΈλž˜ν‚Ή κ°œλ…μ„ λ‹€λ₯Έ λ¬Έμ œμ—λ„ μ μš©μ‹œν‚€κ³  μ‹Άμ–΄μ„œ λ‘œλ˜λΌλŠ” 문제λ₯Ό ν’€μ–΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€!!!!

μ–΄λ €μ› λ˜ 점....

1. ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ§ˆλ‹€ ν•œμ€„ λ›°μš°λŠ”κ±Έ μ–΄λ–»κ²Œ ν•˜μ§€....

2. λ§ˆμ§€λ§‰ 0이 λ‚˜μ™”μ„ λ•Œ μ’…λ£Œλ₯Ό μ–΄λ–»κ²Œ ν•˜μ§€...

3. ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ μˆ˜κ°€ μ•ˆμ£Όμ–΄μ‘ŒλŠ”λ° μ–΄λ–»κ²Œ ν•˜μ§€...

 

 

λ°±νŠΈλž˜ν‚Ή κ°œλ…μ μΈλΆ€λΆ„ λ³΄λ‹€λŠ” λ‹€λ₯Έκ²ƒλ“€μ— 더 μ‹œκ°„μ„ 많이 μž‘μ•„λ¨Ήμ—ˆλ‹€....

순,쑰에 λŒ€ν•œ κ°œλ…μ€ πŸ‘‡πŸ‘‡πŸ‘‡

https://jeniffer0812techstory.tistory.com/94

 

μˆœμ—΄κ³Ό μ‘°ν•©πŸ’ͺ

μœ νŠœλ²„ 딩코딩씨 보고 μ •λ¦¬ν•΄λ³΄λŠ” μˆœμ—΄κ³Ό μ‘°ν•©... μž¬κ·€, λ°±νŠΈλž˜ν‚Ή, dfs... λ“±λ“± 정말 많이 μ—°κ΄€λ˜μ–΄μžˆμ–΄μ„œ μ •λ¦¬ν•˜λ©΄ 쒋을것 κ°™μ•„ μ˜¬λ €λ΄…λ‹ˆλ‹€... ##### permutation(μˆœμ—΄) ''' μˆœμ—΄ : permutation(ν¬ν•¨λ˜μ–΄ 있

jeniffer0812techstory.tistory.com

 

 

μ°Έκ³ ν•˜λ©΄ 쒋을 κ°œλ…λ“€ ✍️

  • exit() : ν”„λ‘œκ·Έλž¨ κ°•μ œ μ’…λ£Œ
for i in range(100):
    if i == 5:
        quit()
    print(i)
    
/* 
0
1
2
3
4
*/
728x90
λ°˜μ‘ν˜•
728x90
λ°˜μ‘ν˜•

μœ νŠœλ²„ 딩코딩씨 보고 μ •λ¦¬ν•΄λ³΄λŠ” μˆœμ—΄κ³Ό μ‘°ν•©...

μž¬κ·€, λ°±νŠΈλž˜ν‚Ή, dfs... λ“±λ“± 정말 많이 μ—°κ΄€λ˜μ–΄μžˆμ–΄μ„œ μ •λ¦¬ν•˜λ©΄ 쒋을것 κ°™μ•„ μ˜¬λ €λ΄…λ‹ˆλ‹€...

##### permutation(μˆœμ—΄)

'''
μˆœμ—΄ : permutation(ν¬ν•¨λ˜μ–΄ μžˆλŠ” μˆ˜κ°€ 같은 μˆ˜μ—¬λ„ μˆœμ„œκ°€ λ‹€λ₯΄λ©΄ λ‹€λ₯Έκ±Έλ‘œ μΉœλ‹€)
dfs νŠΈλ¦¬μ™€ 체크리슀트 μ‚¬μš©

3개의 곡 쀑에 2개λ₯Ό λ½‘λŠ” 경우(3P2)
μ‚¬μš©ν•œ 경우 λ„£μœΌλ©΄ μ•ˆλ˜λ―€λ‘œ 체크리슀트 μ‚¬μš©ν•˜λŠ” κ²ƒμž„....
깊이 + 1 ν•œν›„ 길이에 λ§žλŠ” 값을 리턴을 ν•˜κ³ λ‚˜λ©΄
λ‹€μ‹œ μ²΄ν¬λ¦¬μŠ€νŠΈμ— λΉΌμ€˜μ„œ λ‹€μ‹œ 넣을 수 μžˆλ„λ‘ ν•΄μ€€λ‹€..

1 2
1 3
2 1
2 3
3 1
3 2
6가지
'''

def dfs(L):
    # μ’…λ£Œ 쑰건
    # 리슀트의 길이가 μ°Ύμ•„μ•Ό ν•  개수(r)κ°€ λœλ‹€λ©΄ μ’…λ£Œ
    if L == r:
        print(result)
    else:
        for i in range(len(n)):
            # μ²΄ν¬λ¦¬μŠ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” 값이 μ—†λ‹€λ©΄
            if checklist[i] == 0:
                # result λ¦¬μŠ€νŠΈμ— 값을 μΆ”κ°€
                result[L] = n[i]
                # μ²΄ν¬λ¦¬μŠ€νŠΈμ— 값이 생겼닀고 ν‘œμ‹œν•΄μ£ΌκΈ°
                checklist[i] = 1
                # λ‹€μŒ 깊이둜 이동
                dfs(L+1)
                # λ‹€μŒ λ²ˆμ— λ‹€μ‹œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ λΉΌμ€€λ‹€κ³  κ·Έλƒ₯ μƒκ°ν•˜μ…ˆ ^^;;;
                checklist[i] = 0

n = [1, 2, 3]
r = 2
result = [0] * r
checklist = [0] * len(n)
dfs(0)

 

이해도 μ΄ν•΄μ§€λ§Œ μ–΄λŠμ •λ„ μ™ΈμšΈλ§ŒνΌμ€ μ™Έμš°λΌκ³  ν•˜μ‹¬...

이해해야 μ™Έμš°μ§€ 싢닀가도 μ΄λŸ¬λ‹€κ°€ 진도가 영 μ•ˆλ‚˜κ°ˆκ±° κ°™μ•„μ„œ μ λ‹Ήνžˆ μ΄ν•΄μ‹œμΌœμ„œ μ™Έμš°λŠ”κ²ƒμ΄ 쒋을 λ“―...

 

'''
μ‘°ν•© : 같은 μˆ«μžκ°€ ν¬ν•¨λ˜μ–΄ 있으면 같은 걸둜 인정....
μˆœμ—΄λ³΄λ‹€ 경우의 μˆ˜κ°€ 훨씬 μž‘μŒ...
μˆœμ—΄λ³΄λ‹€ 더 간단...
ν•œλ²ˆ 썼으면 λ‹€μ‹œ 쓰지λ₯Ό μ•ŠμœΌλ‹ˆκΉŒ μ²΄ν¬λ¦¬μŠ€νŠΈλ„ ν•„μš”μ—†μŒ...
DFS 트리λ₯Ό μ΄μš©ν•΄μ„œ ν‘Όλ‹€

3C2

1 2
1 3
2 3

3가지
'''
def dfs(L, BeginWith):
    # μ’…λ£Œ 쑰건
    if L == r:
        print(*result)
    else:
        for i in range(BeginWith, len(n)): # μ‹œμž‘ν•˜λŠ” κ°’λΆ€ν„° λκΉŒμ§€
            result[L] = n[i] # ν•΄λ‹Ήν•˜λŠ” 값을 λ„£μ–΄μ£ΌκΈ°
            dfs(L+1, i+1) # λ‹€μŒ 깉이 λ‹€μŒ 숫자둜 μ΄λ™ν•˜μ—¬ μ „ 값을 λ“€μ–΄μ˜€μ§€ λͺ»ν•˜λ„둝


n = [1, 2, 3]
r = 2
result = [0] * r

dfs(0, 0) # level, begin(μ–΄λ””μ„œ μ‹œμž‘ν• μ§€)
728x90
λ°˜μ‘ν˜•
728x90
λ°˜μ‘ν˜•

 

문제 😡‍πŸ’«

2차원 평면 μœ„μ˜ 점 Nκ°œκ°€ 주어진닀. μ’Œν‘œλ₯Ό yμ’Œν‘œκ°€ μ¦κ°€ν•˜λŠ” 순으둜, yμ’Œν‘œκ°€ κ°™μœΌλ©΄ xμ’Œν‘œκ°€ μ¦κ°€ν•˜λŠ” μˆœμ„œλ‘œ μ •λ ¬ν•œ λ‹€μŒ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진닀. λ‘˜μ§Έ 쀄뢀터 N개의 μ€„μ—λŠ” i번점의 μœ„μΉ˜ xi와 yiκ°€ 주어진닀. (-100,000 ≤ xi, yi ≤ 100,000) μ’Œν‘œλŠ” 항상 μ •μˆ˜μ΄κ³ , μœ„μΉ˜κ°€ 같은 두 점은 μ—†λ‹€.

좜λ ₯

첫째 쀄뢀터 N개의 쀄에 점을 μ •λ ¬ν•œ κ²°κ³Όλ₯Ό 좜λ ₯ν•œλ‹€.

 

ν‹€λ¦° λ‚΄ ν’€ 🦷

# 11651. μ’Œν‘œ μ •λ ¬ν•˜κΈ°2

N = int(input())
result = []
for _ in range(N):
    x, y = map(int, input().split())
    result.append([x, y])

# for k in result:
#     print(k[-1])

for i in range(N-1):
    if result[i][-1] > result[i+1][-1]:
        result[i], result[i+1] = result[i+1], result[i]
        # print(result)
for i in range(N-1):
    if result[i][-1] > result[i+1][-1]:
        result[i], result[i+1] = result[i+1], result[i]

for s in result:
    print(*s)

μ²˜μŒμ—λŠ” μ•žμ—κ²ƒλΆ€ν„° λΉ„κ΅ν•˜λ©΄μ„œ μ•žμ—κ°’μ΄ 뒀에값보닀 크면 λ°”κΏ”μ£ΌλŠ” λŠλ‚ŒμœΌλ‘œ λ‘œμ§μ„ κ΅¬μ„±ν–ˆλŠ”λ°... for문을 λ‘λ²ˆ λŒλ¦¬λ‹ˆκΉŒ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ 닡은 λ‚˜μ™”λŠ”λ° μ•„λ§ˆ νžˆλ“ μΌ€μ΄μŠ€λ“€μ€ λ‹€ κ±Έλ €μ„œ νŽ˜μΌμ„ λ°›μ•˜λ‹€...

μ•„λ§ˆ λ‹€λ₯Έ 애듀은 λ‘λ²ˆμœΌλ‘œ μ•ˆλ˜κ² μ§€..

κ·Έλž˜μ„œ μ–΄λ–€ λ°©λ²•μœΌλ‘œ ν•˜λ©΄ μ’‹μ„κΉŒ λ‹€μ‹œ 생각해보닀가...

y값을 μ°¨λ‘€λ‘œ μ •λ ¬ν•˜λ©΄ λ˜λ‹ˆκΉŒ λ¨Όμ € λ°›μ•„μ„œ μ†ŒνŠΈ??

 

λ‚΄ ν’€ 🦷

# 11651. μ’Œν‘œ μ •λ ¬ν•˜κΈ°2
import sys
input = sys.stdin.readline
N = int(input())
result = []

# y κ°’μ˜ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ 
for _ in range(N):
    x, y = map(int, input().split())
    result.append([y, x])

result.sort()
# print(result)

for y, x in result:
    print(x, y)

κ²°κ³ΌλŠ” μ„±κ³΅μ΄μ—ˆλ‹€!!!! 생각보닀 λ„ˆλ¬΄ κ°„λ‹¨ν•˜κ²Œ ν•΄κ²° γ…‹γ…‹γ…‹γ…‹γ…‹

그러고 λ‹€λ₯Έ μ‚¬λžŒλ“€μ˜ 풀이λ₯Ό λ΄€λŠ”λ° 정말 λ§Žμ€ μ‚¬λžŒλ“€μ΄ λžŒλ‹€λ₯Ό 많이 μ‚¬μš©ν•˜μ…¨λ‹€...

잘 λͺ°λΌμ„œ λͺ» 쓰기도 ν–ˆμ–΄μ„œ μ΄λ²ˆκΈ°νšŒμ— κ³΅λΆ€ν•˜κΈ°λ‘œ ν–ˆλ‹€ ^^

 

μ°Έκ³ ν•˜λ©΄ 쒋을 κ°œλ…λ“€ ✍️

 

- sorted()μ—μ„œ key lambda μ‚¬μš© (μ˜€λ¦„μ°¨μˆœμ΄ κΈ°λ³Έ)

 

  • λ‹¨μˆœνžˆ sorted만 μ‚¬μš©ν•œ 경우
a = [(0, 4), (1, 2), (1, -1), (2, 2), (3, 3)]
b = sorted(a)  # a.sort()와 동일
print(b)

# [(0, 4), (1,  -1), (1, 2), (2, 2), (3, 3)]
# 사싀 ꡳ이 λžŒλ‹€λ‘œ μ–΄λ ΅κ²Œ μ•ˆ μ“°κ³ ... 거꾸둜 λ°›μ•„μ„œ μ •λ ¬ν•˜λŠ”κ²Œ 더 쒋은듯 ^^^^^^^^

 

  • key μΈμžμ— ν•¨μˆ˜λ₯Ό λ„˜κ²¨μ€€ 경우
  1. 첫번째 λ“€μ–΄μžˆλŠ” 값을 μ˜€λ¦„μ°¨μˆœ μ •λ ¬ν•΄μ€€ 경우
a = [(0, 4), (1, 2), (1, -1), (2, 2), (3, 3)]
c = sorted(a, key = lambda x : x[0])
print(c)

# [(0, 4), (1, -1), (1, 2), (2, 2), (3, 3)]
# μ•žμ˜ 인자의 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬λ˜λŠ”κ²ƒμ„ λ³Ό 수 μžˆλ‹€

 

  2. λ‘λ²ˆμ§Έ λ“€μ–΄μžˆλŠ” 값을 μ˜€λ¦„μ°¨μˆœ μ •λ ¬ν•΄μ€€ 경우

a = [(0, 4), (1, 2), (1, -1), (2, 2), (3, 3)]
d = sorted(a, key = lambda x : x[1])
print(d)

# [(1, -1), (1, 2), (2, 2), (3, 3), (0, 4)]
# λ’€μ˜ 인자의 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬λ˜λŠ”κ²ƒμ„ λ³Ό 수 μžˆλ‹€

   

   3. 첫번째 λ“€μ–΄μžˆλŠ” 값은 μ˜€λ¦„μ°¨μˆœ, λ‘λ²ˆμ§Έ λ“€μ–΄μžˆλŠ” 값은 λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬ν•΄μ€€ 경우

# λ‚΄λ¦Όμ°¨μˆœμ€ μ•žμ— -λ₯Ό λΆ™μ—¬μ£Όλ©΄ λœλ‹€!!
e = sorted(a, key = lambda x = (x[0], -x[1]))
print(e)

# [(0, 4), (1, 2), (1, -1), (2, 2), (3, 3)]

 


 

# 11651. μ’Œν‘œ μ •λ ¬ν•˜κΈ°2
import sys
input = sys.stdin.readline
N = int(input())
result = []

# x값에 상관없이 y 값을 μ •λ ¬ => y κ°’ μ •λ ¬
for _ in range(N):
    x, y = map(int, input().split())
    result.append([x, y])

ans = sorted(result, key = lambda x : (x[1], x[0]))
for x, y in ans:
    print(x, y)

 

배운 것을 ν† λŒ€λ‘œ λžŒλ‹€λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€μ‹œ 문제λ₯Ό ν’€λ©΄ μ΄λŸ¬ν•œ μ½”λ“œλ₯Ό 얻을 수 μžˆλ‹€!!

λ‹€μŒ μ •λ ¬ λ¬Έμ œλŠ” λžŒλ‹€λ‘œ 도전해봐야겠닀 πŸ˜‚πŸ˜‚πŸ˜‚

 

 

 

728x90
λ°˜μ‘ν˜•
728x90
λ°˜μ‘ν˜•

였늘 친 μ‹œν—˜ λ¬Έμ œμ€‘μ— bfs, dfs  문제 해결을 ν•˜μ§€ λͺ»ν•΄μ„œ 볡슡 ν•˜λ €λ‹€κ°€ μ‹œν—˜ 친 κΈ°λ…μœΌλ‘œ(?)πŸ˜‚πŸ˜‚πŸ˜‚

단계별 μœ„μ— μ•ˆ ν‘Όκ±° 쀑에 7단계 μΌλ°˜μˆ˜ν•™μ„ λ§ˆλ¬΄λ¦¬ν•˜κΈ°λ‘œν–ˆλ‹€!!! 

λŒ€λΆ€λΆ„ 브둠즈고 κ·œμΉ™λ§Œ 찾으면 ν•΄κ²° κ°€λŠ₯ν•œ κ°„λ‹¨ν•œ 문제인데 λΆ„μˆ˜μ°ΎκΈ°κ°€ 골머리가 쑰금 μ•„νŒ λ‹€ ^________^

 

λ¬Έμ œπŸ€”

λ¬΄ν•œνžˆ 큰 배열에 λ‹€μŒκ³Ό 같이 λΆ„μˆ˜λ“€μ΄ μ ν˜€μžˆλ‹€.

1/1 1/2 1/3 1/4 1/5
2/1 2/2 2/3 2/4
3/1 3/2 3/3
4/1 4/2
5/1

이와 같이 λ‚˜μ—΄λœ λΆ„μˆ˜λ“€μ„ 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … κ³Ό 같은 μ§€κ·Έμž¬κ·Έ μˆœμ„œλ‘œ μ°¨λ‘€λŒ€λ‘œ 1번, 2번, 3번, 4번, 5번, … λΆ„μˆ˜λΌκ³  ν•˜μž.

Xκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, X번째 λΆ„μˆ˜λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 X(1 ≤ X ≤ 10,000,000)κ°€ 주어진닀.

좜λ ₯

첫째 쀄에 λΆ„μˆ˜λ₯Ό 좜λ ₯ν•œλ‹€.

 

λ‚΄ ν’€πŸ¦·

# 1193. λΆ„μˆ˜ μ°ΎκΈ°
N = int(input())

line = 0 # λŒ€κ°μ„  갯수
idx = 0 # λ§ˆμ§€λ§‰ 인덱슀 (1, 3, 6, 10...)
while idx < N:
    line += 1
    idx += line # λ§ˆμ§€λ§‰ μΈλ±μŠ€λŠ” 라인에 μžˆλŠ” λΆ„μžμ˜ 갯수 만큼 λŠ˜μ–΄λ‚œλ‹€

result = []
# 라인 ν™€μˆ˜μΌ λ–Ό
if line % 2:
    ja = idx - N + 1     # λΆ„μž
    mo = line - idx + N  # λΆ„λͺ¨
    result.append(ja)
    result.append('/')
    result.append(mo)
else:
    ja = line - idx + N
    mo = idx - N + 1
    result.append(ja)
    result.append('/')
    result.append(mo)
    
print(''.join(map(str, result)))

λ­”κ°€ λŠλ‚Œμ μΈ λŠλ‚Œμ€ μ•Œκ² λŠ”λ° μ°ΎκΈ° 쉽지 μ•Šμ•˜μ§€λ§Œ λΆ„μˆ˜λ₯Ό ν•˜λ‚˜ν•˜λ‚˜ 적고 λœ―μ–΄λ³΄λ©΄ κ·œμΉ™μ„ 찾을 수 μžˆμ—ˆλ‹€!!  γ…œγ…œγ…œ

Nλ§Œμ„ 가지고 λΆ„μžμ™€ λΆ„λͺ¨λ₯Ό μ–΄λ–»κ²Œ 적어야할지λ₯Ό 제일 고민을 많이 ν–ˆλ˜ 뢀뢄인것 κ°™λ‹€.....

ja = λΆ„μž / mo = λΆ„λͺ¨ μž…λ‹ˆλ‹€ γ…‹γ…‹γ…‹

 

 

참고함면 쒋을 κ°œλ…λ“€ ✍️

  • 리슀트λ₯Ό λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ 좜λ ₯ν•˜κΈ°
result = [1, 2, 3, 4]
# 곡백없이 좜λ ₯
print(''.join(map(str, result)))   # 1234
# 곡백있이 좜λ ₯
print(' '.join(map(str, result)))  # 1 2 3 4
# , μ‰Όν‘œλ‘œ μ—°κ²°ν•˜μ—¬ 좜λ ₯
print(', '.join(map(str, result))  # 1, 2, 3, 4
# μ–ΈνŒ¨ν‚Ή
print(*result)                     # 1 2 3 4

 

728x90
λ°˜μ‘ν˜•
728x90
λ°˜μ‘ν˜•

문제

N개의 μ •μˆ˜ A[1], A[2], …, A[N]이 μ£Όμ–΄μ Έ μžˆμ„ λ•Œ, 이 μ•ˆμ— XλΌλŠ” μ •μˆ˜κ°€ μ‘΄μž¬ν•˜λŠ”μ§€ μ•Œμ•„λ‚΄λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 μžμ—°μˆ˜ N(1 ≤ N ≤ 100,000)이 주어진닀. λ‹€μŒ μ€„μ—λŠ” N개의 μ •μˆ˜ A[1], A[2], …, A[N]이 주어진닀. λ‹€μŒ μ€„μ—λŠ” M(1 ≤ M ≤ 100,000)이 주어진닀. λ‹€μŒ μ€„μ—λŠ” M개의 μˆ˜λ“€μ΄ μ£Όμ–΄μ§€λŠ”λ°, 이 μˆ˜λ“€μ΄ Aμ•ˆμ— μ‘΄μž¬ν•˜λŠ”μ§€ μ•Œμ•„λ‚΄λ©΄ λœλ‹€. λͺ¨λ“  μ •μˆ˜μ˜ λ²”μœ„λŠ” -231 λ³΄λ‹€ ν¬κ±°λ‚˜ κ°™κ³  231보닀 μž‘λ‹€.

좜λ ₯

M개의 쀄에 닡을 좜λ ₯ν•œλ‹€. μ‘΄μž¬ν•˜λ©΄ 1을, μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ 0을 좜λ ₯ν•œλ‹€.

 

예제 μž…λ ₯ 1 

5
4 1 5 2 3
5
1 3 7 9 5

예제 좜λ ₯ 1 

1
1
0
0
1

ν‹€λ¦° λ‚΄ ν’€πŸ¦·

# 1920. 수찾기
import sys
input = sys.stdin.readline

N = int(input())
arr = list(map(int, sys.stdin.readline().split()))

M = int(input())
arr_2 = list(map(int, sys.stdin.readline().split()))
result = []

for j in range(M):
    one = []
    for i in range(N):
        if arr[i] == arr_2[j]:
            one.append(1)
            break
        else:
            one.append(0)

    # print(one)
    cnt = 0
    for k in one:
        if k == 1:
            cnt += 1
    if cnt >= 1:
        result.append(1)
    else:
        result.append(0)

for k in result:
    print(k)

κ΅¬μ§κ΅¬μ§ν•˜κ²Œ 짜기 달인이 λ˜λ²„λ¦° λ‚˜,,,,

단계별 ν’€μ΄λ‘œ μ•ˆλ“€μ–΄κ°€κ³  성곡λ₯ λ‘œ λ“€μ–΄κ°€μ„œ μ•ˆ ν’€μ–΄μ Έ μžˆλŠ”κ±° 풀어가지고

μ–΄λ–€ λ°©μ‹μœΌλ‘œ ν’€μ–΄μ•Όν•˜λŠ”μ§€ 힌트(이차원 배열이닀, 정렬이닀, 이진탐색이닀 이런거)κ°€ μ—†μ–΄μ„œ 어카지 ν•˜λ‹€κ°€

μ°Ύμ•„μ•Όν•  값이 주어진 arr_2 리슀트λ₯Ό λŒλΌλ©΄μ„œ arr을 λŒλ¦¬λŠ” μ™„μ „ νƒμƒ‰μœΌλ‘œ μ°Ύμ•„μ„œ 있으면 더해주면 λ˜κ² λ‹€..

μ‹Άμ—ˆκ³  무슨일둜 인덱슀 μ•„μ›ƒμ˜€λΈŒλ ˆμΈμ§€λ„ μ•ˆλ‚˜κ³  ν•œλ²ˆμ— μ„±κ³΅ν–ˆλŠ”λ””.... ν–ˆλŠ”λ°.... μ œμΆœν–ˆλŠ”λ°...

ν–ˆλŠ”λ° μ‹œκ°„μ΄ˆκ³Όκ°€ λ‚˜λ²„λ Έλ‹€ γ…‹γ…‹ ν˜Ήμ‹œλ‚˜ λͺ°λΌμ„œ import sysλ‘œλ„ λ°”κΏ”λ΄€λŠ”λ° μ‹€νŒ¨....γ…œγ…œ

μˆ˜μ •λœ λ‚΄ ν’€πŸ¦·

λ°±μ€€μ—μ„œ ν’€λ‹€κ°€ λ§‰νžˆλ©΄ μ§ˆλ¬Έκ²Œμ‹œνŒ λ“€μ–΄κ°€μ„œ μ’…μ’… 힌트λ₯Ό μ–»λŠ”λ°

λ‚˜μ²˜λŸΌ κ΅¬μ§ˆκ΅¬μ§ˆν•˜κ²Œ ν‘ΈλŠ” μ‚¬λžŒμ΄ μ—†μ—ˆκ³  γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹

set을 μ‚¬μš©ν•˜μ—¬ μž…λ ₯λ°›μ•„ μ‹œκ°„μ„ 적게 걸리게 ν•˜λŠ” λ°©λ²•μ΄λ‚˜ 이진 탐색을 μ‚¬μš©ν•˜μ˜€λ‹€!!

그러고 λ³΄λ‹ˆ 이진 탐색을 μ΄μš©ν•˜λ©΄ λ˜μ—ˆλŠ”λ° ν˜Όμžμ„œ λΈŒλ‘œλ…Έλ§ˆμŠ€(무지성)으둜 ν•˜κ³ μžˆμ—ˆλ‹€....

 

 

κ·Έλž˜μ„œ λ¨Όμ € ν•΄λ³Έ set() 으둜 μž…λ ₯ λ°›κΈ° =>

N = int(input())
arr = set(map(int, input().split())) # 좜λ ₯ μ‹œκ°„μ„ 쀄이기 μœ„ν•΄ set λ°›μŒ

M = int(input())
arr_2 = list(map(int, input().split()))

for i in arr_2:
    if i in arr: print(1)
    else: print(0)

κ²°κ³ΌλŠ” 성곡~~~~~

set을 자주 μ•ˆ μ“°λ‹€λ³΄λ‹ˆ μ–΄λ–€ λΆ€λΆ„μ—μ„œ 쓸지 λͺ°λžλŠ”데

μž…λ ₯을 set으둜 λ°›μ•„ μ‚¬μš©ν•œλ‹€λŠ” 점을 μ•Œκ²Œ λ˜μ—ˆλ‹€!!

μ΄μ§„νƒμƒ‰μœΌλ‘œ 풀은 λ‚΄ ν’€πŸ¦·

또 λ‹€λ₯Έ 방법쀑에 ν•˜λ‚˜μΈ λ°”μ΄λ„ˆλ¦¬ μ„œμΉ˜λ₯Ό ν†΅ν•œ 방법도 많이 λ³΄μ—¬μ„œ 도전해 λ³΄μ•˜λ‹€~~

N = int(input())
arr = list(map(int, input().split()))
arr.sort() # 이진탐색은 μ •λ ¬λœ 것듀 νƒμƒ‰ν•˜λŠ”λ° 이 λΆ€λΆ„ 기얡을 λͺ»ν•΄μ„œ λ¬΄ν•œ λ£¨ν”„λ‘œ λͺ‡λ²ˆ λ‹€λ…€μ™”λ‹€
M = int(input())
arr_2 = list(map(int, input().split()))

for i in arr_2:
    # λ°”μ΄λ„ˆλ¦¬ μ„œμΉ˜ ν™œμš©ν•˜κΈ°(이진탐색)
    result = False 
    start = 0 # μ‹œμž‘ 인덱슀
    end = N - 1 # 끝 인덱슀

    while start <= end:
        mid = ((start + end) // 2) # μ€‘κ°„κ°’μ˜ μœ„μΉ˜μ— ν•΄λ‹Ήν•˜λŠ” μˆ˜μ™€ λͺ©ν‘œ 비ꡐ해 λ‚˜κ°
        if i == arr[mid]: # 쀑간값과 λͺ©ν‘œκ°’이 κ°™λ‹€λ©΄
            result = True
            break
        elif i > arr[mid]:
            start = mid + 1
        else:
            end = mid - 1

    if result:
        print(1)
    else:
        print(0)

μ‹œν—˜μ—λ„ λ‚˜μ˜€κΈ°λŠ” ν–ˆμ§€λ§Œ μ˜€λžœλ§Œμ— 이진탐색을 μ‚¬μš©ν•΄μ„œ 계속 틀린값이 λ‚˜μ˜€κ³ 

λ¬΄ν•œλ£¨ν”„λ‘œ μž μ‹œ λ¨Όλ‚˜λΌμ΄μ›ƒλ‚˜λΌ λ‹€λ…€μ™”λ‹€....

쀑간값과 λͺ©ν‘œκ°’을 λΉ„κ΅ν•˜λ©΄μ„œ μ‹œμž‘μ μ΄ λ§ˆμ§€λ§‰μ λ³΄λ‹€ λ„˜μ–΄μ„œλ©΄ μ’…λ£Œλ˜λŠ” 기저쑰건을 μ„€μ •ν•˜μ˜€λ‹€!!!!

 

참고함면 쒋을 κ°œλ…λ“€ ✍️

1) 이진 검색(Binary Search)

:  자료의 κ°€μ˜¨λ°μ— μžˆλŠ” ν•­λͺ©μ˜ ν‚€ κ°’κ³Ό λΉ„κ΅ν•˜μ—¬ λ‹€μŒ κ²€μƒ‰μ˜ μœ„μΉ˜λ₯Ό κ²°μ •ν•˜κ³  검색을 계속 μ§„ν–‰ν•˜λŠ” 방법

 => λͺ©μ  ν‚€λ₯Ό 찾을 λ•ŒκΉŒμ§€ 이진 검색을 μˆœν™˜μ μœΌλ‘œ 반볡 μˆ˜ν–‰ν•¨μœΌλ‘œμ¨ 검색 λ²”μœ„λ₯Ό 반으둜 μ€„μ—¬κ°€λ©΄μ„œ 보닀 λΉ λ₯΄κ²Œ 검색을 μˆ˜ν–‰ν•œλ‹€

 

- 이진 검색을 ν•˜κΈ° μœ„ν•΄μ„œλŠ” μžλ£Œκ°€ μ •λ ¬λœ μƒνƒœμ—¬μ•Ό ν•œλ‹€(정렬이 μ•„λ‹ˆλΌ 뒀에 μˆ˜κ°€ μ•žμ— μˆ˜λ³΄λ‹€ 컀버리면 μ˜€λ°”μžλ‚˜.. 찾을 μˆ˜κ°€ μ—†μŒ!!!!!! 주의!!!!!!!!1..)

 

- 검색 κ³Όμ •

  1. 자료의 쀑앙에 μžˆλŠ” μ›μ†Œλ₯Ό κ³ λ₯Έλ‹€
  2. 쀑앙 μ›μ†Œμ˜ κ°’κ³Ό 찾고자 ν•˜λŠ” λͺ©ν‘œ 값을 λΉ„κ΅ν•œλ‹€
  3. λͺ©ν‘œκ°’이 쀑앙 μ›μ†Œμ˜ 값보닀 μž‘μœΌλ©΄ 자료의 μ™Όμͺ½ λ°˜μ— λŒ€ν•΄μ„œ μƒˆλ‘œ 검색을 μˆ˜ν–‰, 크닀면 자료의 였λ₯Έμͺ½ λ°˜μ— λŒ€ν•΄μ„œ μ„Έλ‘œ 검색을 μˆ˜ν–‰
  4. 찾고자 ν•˜λŠ” 값을 찾을 λ–„κΉŒμ§€ 1~3의 과정을 λ°˜λ³΅ν•œλ‹€
  5. μ°ΎλŠ”λ‹€λ©΄ 성곡, λͺ» 찾으면 μ‹€νŒ¨

- κ΅¬ν˜„

  • 검색 λ²”μœ„μ˜ μ‹œμž‘μ κ³Ό μ’…λ£Œμ μ„ μ΄μš©ν•˜μ—¬ 검색을 반볡 μˆ˜ν–‰ν•œλ‹€ => while의 μ’…λ£Œ 쑰건을 잘 μ„€μ •ν•˜κΈ°
  • 이진 κ²€μƒ‰μ˜ 경우, μžλ£Œμ— μ‚½μž…μ΄λ‚˜ μ‚­μ œκ°€ λ°œμƒν–ˆμ„ λ•Œ λ°°μ—΄μ˜ μƒνƒœλ₯Ό 항상 μ •λ ¬ μƒνƒœλ‘œ μœ μ§€ν•˜λŠ” μΆ”κ°€ μž‘μ—…μ΄ ν•„μš”
# 이진 검색 μ•Œκ³ λ¦¬μ¦˜
def binarySweach(a, N, key):
	start = 0  # μ‹œμž‘μ  
    end = N -1  # μ’…λ£Œμ 
    while start <= end:
    	middle = (start + end) // 2 # λͺ«μœΌλ‘œ ν•˜λŠ” 이유 : λ‚˜λˆ„κΈ° μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λ©΄ .0으둜 floatλ˜κ±Έλž‘
        if a[middle] == key: # 검색 성곡
        	 return true
        elif a[middle] > key:
        	 end = middle - 1
        else:
        	start = middle + 1
    return flase # while 문을 λ‹€ λŒμ•˜λŠ”λ°λ„ 찾지λͺ»ν•œλ‹€λ©΄ 검색 μ‹€νŒ¨

 

728x90
λ°˜μ‘ν˜•
728x90
λ°˜μ‘ν˜•
# μž¬κ·€ν•¨μˆ˜λ‘œ 뢀뢄집합 λ§Œλ“€κΈ°
# bits: ν•΄λ‹Ή 인덱슀의 μš”μ†Œλ₯Ό μ‚¬μš©ν• μ§€μ˜ 유무 (1은 μ‚¬μš©ν•˜κ³  0은 μ•„λ‹˜)
# depth : λ‚΄κ°€ μ–Όλ§ˆλ‚˜ ν•¨μˆ˜λ₯Ό μž¬κ·€ν˜ΈμΆœν–ˆλŠ”μ§€μ— λŒ€ν•œ 카운트 κ°’...
def recur(bits, depth):
    # κΈ°μ € 쑰건
    if depth == N:
        for i in range(N):
            if bits[i] == 1:
                print(arr[i], end=' ')
        print()
        return

    for i in range(2): # 0, 1
        bits[depth] = i
        # 자기 μžμ‹ μ„ 호좜
        recur(bits, depth + 1)


N = 4
arr = [1, 2, 3, 4]
recur([0] * N, 0)

# result
4 
3 
3 4 
2 
2 4 
2 3 
2 3 4 
1 
1 4 
1 3 
1 3 4 
1 2 
1 2 4 
1 2 3 
1 2 3 4

λ’€μ—μ„œ ν•˜λ‚˜ν•˜λ‚˜ λŒμ•„μ˜¨λ‹€κ³  생각해주면 μ΄ν•΄ν•˜κΈ° μ‰¬μšΈκ²ƒ κ°™λ‹€~~~

 

μž¬κ·€ν•¨μˆ˜ λ„ˆλ¬΄ μ–΄λ €μ›Œμš”μ˜€....제제제.....κΈ°.........λž„,,,,

 

μ—¬κΈ°μ„œ 제일 μ€‘μš”ν•œ ν¬μΈνŠΈλŠ” [0, 0, 0, 0] 배열을 λκΉŒμ§€ λ§Œλ“€μ–΄μ£Όκ³  μ—­μœΌλ‘œ λ§Œλ“€μ–΄μ Έ λ‚˜κ°€λŠ” λŠλ‚Œμ΄λΌλŠ”κ±°?

return을 λ°›μ•˜μ„ λ•Œ, 제일 처음이 μ•„λ‹Œ μžμ‹ μ„ ν˜ΈμΆœν–ˆλ˜ 곳으둜 λŒμ•„κ°€ 0이 μ•„λ‹ˆλΌ 1인 경우λ₯Ό λ§Œλ“€μ–΄μ€€λ‹€λŠ”κ±°??

κ·Έλž˜μ„œ 닡을 좜λ ₯ν–ˆμ„λ•Œ, λ¦¬μŠ€νŠΈμ— κ°€μž₯ λ¨Όμ € μ €μž₯된 1이 μ•„λ‹ˆλΌ 4κ°€ λ‚˜μ˜€λŠ” 뢀뢄이 정말 μ€‘μš” 포인트인거 κ°™λ‹€...

 

μž¬κ·€μ˜ κ°€μž₯ λŒ€ν‘œμ μΈ 예 : νŒ©ν† λ¦¬μ–Ό

 

728x90
λ°˜μ‘ν˜•
728x90
λ°˜μ‘ν˜•

μ˜€λŠ˜μ€ μ‹Έν”Όμ—μ„œ μŠ€νƒμ— κ΄€ν•΄ λ°°μ› λ‹€

λ³΅μŠ΅μœΌλ‘œλŠ” 백쀀에 μžˆλŠ” μŠ€νƒ 문제 ν’€κΈ°..

λ‹€ ν’€κ³  μ‹Άμ—ˆλŠ”λ° μ–΄μ œ ν’€λ‹€ 만 λΈŒλ£¨νˆ¬ν† μŠ€μ— μ²΄μŠ€κ°€ λ„ˆλ¬΄ 였래 κ±Έλ €μ„œ 2문제 λ‚¨μ•˜λ‹€...

내일 해야지;;;;; λ‹€μŒμ— μ²΄μŠ€λ„ μ‹œκ°„λ‚˜λ©΄ μ μ–΄λ³΄λŠ”κ±Έλ‘œ

 

μ„œλ‘ μ΄ λ„ˆλ¬΄ κΈΈμ—ˆκ³  였늘 μ†Œκ°œν•΄ λ“œλ¦΄ λ¬Έμ œλŠ” λ°±μ€€ 9012. κ΄„ν˜Έμž…λ‹ˆλ‹€!!!

였늘 sweaμ—μ„œλ„ λΉ„μŠ·ν•œ 문제λ₯Ό ν’€μ—ˆλŠ”λ° 쑰금 μ‰¬μš΄ λ²„μ „μž…λ‹ˆλ‹€ ^^

그럼 고 🌟🌟

문제

κ΄„ν˜Έ λ¬Έμžμ—΄(Parenthesis String, PS)은 두 개의 κ΄„ν˜Έ 기호인 ‘(’ 와 ‘)’ 만으둜 κ΅¬μ„±λ˜μ–΄ μžˆλŠ” λ¬Έμžμ—΄μ΄λ‹€. κ·Έ μ€‘μ—μ„œ κ΄„ν˜Έμ˜ λͺ¨μ–‘이 λ°”λ₯΄κ²Œ κ΅¬μ„±λœ λ¬Έμžμ—΄μ„ μ˜¬λ°”λ₯Έ κ΄„ν˜Έ λ¬Έμžμ—΄(Valid PS, VPS)이라고 λΆ€λ₯Έλ‹€. ν•œ 쌍의 κ΄„ν˜Έ 기호둜 된 “( )” λ¬Έμžμ—΄μ€ κΈ°λ³Έ VPS 이라고 λΆ€λ₯Έλ‹€. 만일 x κ°€ VPS 라면 이것을 ν•˜λ‚˜μ˜ κ΄„ν˜Έμ— 넣은 μƒˆλ‘œμš΄ λ¬Έμžμ—΄ “(x)”도 VPS κ°€ λœλ‹€. 그리고 두 VPS x 와 yλ₯Ό μ ‘ν•©(concatenation)μ‹œν‚¨ μƒˆλ‘œμš΄ λ¬Έμžμ—΄ xy도 VPS κ°€ λœλ‹€. 예λ₯Ό λ“€μ–΄ “(())()”와 “((()))” λŠ” VPS μ΄μ§€λ§Œ “(()(”, “(())()))” , 그리고 “(()” λŠ” λͺ¨λ‘ VPS κ°€ μ•„λ‹Œ λ¬Έμžμ—΄μ΄λ‹€. 

μ—¬λŸ¬λΆ„μ€ μž…λ ₯으둜 주어진 κ΄„ν˜Έ λ¬Έμžμ—΄μ΄ VPS 인지 μ•„λ‹Œμ§€λ₯Ό νŒλ‹¨ν•΄μ„œ κ·Έ κ²°κ³Όλ₯Ό YES 와 NO 둜 λ‚˜νƒ€λ‚΄μ–΄μ•Ό ν•œλ‹€. 

μž…λ ₯

μž…λ ₯ λ°μ΄ν„°λŠ” ν‘œμ€€ μž…λ ₯을 μ‚¬μš©ν•œλ‹€. μž…λ ₯은 T개의 ν…ŒμŠ€νŠΈ λ°μ΄ν„°λ‘œ 주어진닀. μž…λ ₯의 첫 번째 μ€„μ—λŠ” μž…λ ₯ λ°μ΄ν„°μ˜ 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ Tκ°€ 주어진닀. 각 ν…ŒμŠ€νŠΈ λ°μ΄ν„°μ˜ 첫째 μ€„μ—λŠ” κ΄„ν˜Έ λ¬Έμžμ—΄μ΄ ν•œ 쀄에 주어진닀. ν•˜λ‚˜μ˜ κ΄„ν˜Έ λ¬Έμžμ—΄μ˜ κΈΈμ΄λŠ” 2 이상 50 μ΄ν•˜μ΄λ‹€. 

좜λ ₯

좜λ ₯은 ν‘œμ€€ 좜λ ₯을 μ‚¬μš©ν•œλ‹€. 만일 μž…λ ₯ κ΄„ν˜Έ λ¬Έμžμ—΄μ΄ μ˜¬λ°”λ₯Έ κ΄„ν˜Έ λ¬Έμžμ—΄(VPS)이면 “YES”, μ•„λ‹ˆλ©΄ “NO”λ₯Ό ν•œ 쀄에 ν•˜λ‚˜μ”© μ°¨λ‘€λŒ€λ‘œ 좜λ ₯ν•΄μ•Ό ν•œλ‹€. 

예제 μž…λ ₯ 1 λ³΅μ‚¬

6
(())())
(((()())()
(()())((()))
((()()(()))(((())))()
()()()()(()()())()
(()((())()(

예제 좜λ ₯ 1 λ³΅μ‚¬

NO
NO
YES
NO
YES
NO

 μ΄ κ΄„ν˜Έ λ¬Έμ œκ°€ μ•½κ°„ μŠ€νƒμ˜ 기본문제 λŠλ‚Œ?? λ¨Όκ°€ μ‹œν—˜μ— 쑰금 μ‘μš©ν•΄μ„œ λ‚˜μ˜¬κ±° 같은 λŠλ‚Œμ΄ λ“œλŠ”λ°μš”...

λ¨Όμ € μ œκ°€ μ§  μ½”λ“œ μ†Œκ°œν•΄ λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€!!!

# 9012. κ΄„ν˜Έ - 였늘 λ‚˜λ₯Ό μ§€κ²Ήκ²Œ ν•œ ^^ : 였늘 ν•™κ΅μ—μ„œ 이거 λΉ„μŠ·ν•œ 문제 ν•œ 2μ‹œκ°„ 머리 μ‹Έλ§Έκ±°λ©μš”...
stack = [] 						# κ΄„ν˜Έλ₯Ό 담을 리슀트λ₯Ό λ§Œλ“€μ–΄ μ€¬μŠ΅λ‹ˆλ‹€
def gal(text): 					# ν•¨μˆ˜λ‘œ λ§Œλ“œλŠ”κ²Œ 쑰금 νŽΈν•΄μ Έμ„œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€
    for ch in text: 			# ν…μŠ€νŠΈ λ‚΄λΆ€λ₯Ό μˆœνšŒν•˜λ©΄μ„œ
        if ch == '(': 			# 문자'('κ°€ 있으면
            stack.append(ch)	# 문자λ₯Ό λ¦¬μŠ€νŠΈμ— μΆ”κ°€ν•΄μ€λ‹ˆλ‹€
        elif ch == ')':			# 문자')'κ°€ 있으면
            if len(stack) == 0: # 리슀트의 길이λ₯Ό ν™•μΈν•΄μ€˜μ•Ό ν•˜λŠ”λ° 0이라면 μ—΄λ¦°κΈ°ν˜Έκ°€ μ—†μ–΄μ„œ ν‹€λ¦° textμž…λ‹ˆλ‹Ή
                return 'NO'		# 고둜 NOλ₯Ό λ°˜ν™˜ν•΄ μ€¬μ–΄μš”
            else:				# 길이가 0이 μ•„λ‹ˆλΌλ©΄...
                if stack[-1] == '(': 	# μŠ€νƒμ˜ λ§ˆμ§€λ§‰μ— (κ°€ 있으면 
                    stack.pop()			# λ§ˆμ§€λ§‰ (λ₯Ό μ‚­μ œν•˜κ³ 
                    continue			# κ³„μ†ν•΄μ„œ λ‹€μŒ 문자λ₯Ό 확인해 μ€¬μŠ΅λ‹ˆλ‹€
                else:
                    return 'NO'			# ν•˜μ§€λ§Œ μ—΄λ¦°κΈ°ν˜Έ '('κ°€ μ•„λ‹Œ λ‹€λ₯Έκ²Œ λ“€μ–΄μžˆμœΌλ©΄ ν‹€λ¦° λ¬Έμž₯이겠죠

    if len(stack) == 0: # 결둠적으둜 ')'κ°€ λ‚˜μ˜¬λ–„ '('을 μ§€μ› μœΌλ―€λ‘œ 쌍이 λ§žλŠ”λ‹€λ©΄ 
    					#μŠ€νƒμ— λ‚¨μ•„μžˆλŠ”κ²Œ μ—†μ–΄μ•Ό ν•˜λ‹ˆκΉŒ
        return 'YES'	# YESλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€
    else:
        return 'NO' 	# μ•„λ‹ˆλ©΄ 'NO'

import sys						# μŠ€νƒ 문제λ₯Ό ν’€κ³  처음으둜 μ‹œκ°„μ΄ˆκ³Όκ°€ λ– μ„œ μ•Œμ•„μ™”μŠ΅λ‹ˆλ‹€.. 
T = int(sys.stdin.readline())
for _ in range(T):
    bracket = sys.stdin.readline()
    stack = []  ########사싀 μ € μœ„μ— ν•¨μˆ˜κ°€ μ•„λ‹ˆλΌ 이뢀뢄이 ν‹€λ ΈλŠ”λ°μš”....
    #μŠ€νƒμ„ ν• λ•Œλ§ˆλ‹€ μ΄ˆκΈ°ν™”ν•΄μ€˜μ•Όν•΄μš”.... ν‹€λ¦° 값이 λ“€μ–΄μžˆλ‹€λ©΄ λ‹€μŒ 사둀도 ν‹€λ¦¬κ±°λ“±μš”..... 기초적인 λΆ€λΆ„μ΄λ‹ˆκΉŒ κΌ­ κΈ°μ–΅ν•˜κΈ°!!!!

    result = gal(bracket)
    print(result)

 μ œκ°€ λ„ˆλ¬΄ μ„€λͺ…을 μž₯ν™©ν•˜κ²Œ μ μ—ˆλŠ”λ° κ°„λ‹¨ν•˜κ²Œ μš”μ•½ν•˜μžλ©΄...

성립 β›”

1. () 쌍이 λ§žμ•„μ•Όν•¨ : '(', ')'의 각각의 κ°œμˆ˜κ°€ κ°™μ•„μ•Ό 함 (=λ¦¬μŠ€νŠΈμ— κΈ°ν˜Έκ°€ λ‚¨μ•„μžˆμœΌλ©΄ μ•ˆλ¨)

2. λ‹«νžŒ 기호')'κ°€ λ¨Όμ € λ‚˜μ˜€λ©΄ μ•ˆλœλ‹€

 

 

μœ„μ— ν•¨μˆ˜ κ΅¬ν˜„ν•˜λŠ”λ°λ„ 였래 κ±Έλ Έμ§€λ§Œ...

νžˆλ“  μΌ€μ΄μŠ€ μ‹€νŒ¨ν•˜κ²Œ ν•œ 뢀뢄은 리슀트 μ΄ˆκΈ°ν™”μ˜€μŠ΅λ‹ˆλ‹€...

잘λͺ»λœ μΌ€μ΄μŠ€λ₯Ό ν•œν›„μ— λ‚¨μ•„μžˆλŠ” 리슀트λ₯Ό μ΄ˆκΈ°ν™” ν•΄μ•Όν•˜λŠ”λ° λ”°λ‘œ μ΄ˆκΈ°ν™”ν•˜λŠ” 뢀뢄을 μ•ˆ λ„£μ–΄μ€¬λ”λΌκ΅¬μš”..

정말 κΈ°λ³Έμ μ΄μ§€λ§Œ μ•ˆ λ„£μ–΄μœΌλ©΄ ν‹€λ¦¬λŠ” μ€‘μš”ν•œ λΆ€λΆ„μ΄λ‹ˆκΉŒ ν•œλ²ˆ 더 μƒκ°ν•΄λ³΄μžκ΅¬μ—¬ ^___________^

 


그리고 μŠ€νƒλ¬Έμ œλ‘œ λ„˜μ–΄μ˜€λ©΄μ„œ 처음으둜 νŒŒμ΄μ¬μ—μ„œ μ‹œκ°„μ΄ˆκ³Όκ°€ λ‚¬λŠ”λ°μ—¬...

λΉ λ₯Έ μž…λ ₯으 λ°”κΏ”μ£Όλ©΄ μ‹œκ°„μ΄ˆκ³Ό μ—λŸ¬λŠ” μ•ˆλ‚©λ‹ˆλ‹€!!!

 

λΉ λ₯Έ μž…μΆœλ ₯
import sys
num = int(sys.stdin.readline()) => input()
μ—¬λŸ¬κ°€μ§€ 숫자λ₯Ό μž…λ ₯λ°›κ±°λ‚˜ 리슀트λ₯Ό μ”Œμ›Œμ£Όκ±°λ‚˜ 띄어쓰기λ₯Ό ν•˜λŠ” κ²½μš°λŠ” μ›λž˜ μ•Œλ˜ κ·ΈλŒ€λ‘œ μž…λ‹ˆπŸ¦«

 

728x90
λ°˜μ‘ν˜•

+ Recent posts