Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

9-alstjr7437 #29

Merged
merged 4 commits into from
Feb 20, 2024
Merged

9-alstjr7437 #29

merged 4 commits into from
Feb 20, 2024

Conversation

alstjr7437
Copy link
Member

@alstjr7437 alstjr7437 commented Feb 17, 2024

πŸ”— 문제 링크

전ꡬ와 μŠ€μœ„μΉ˜

βœ”οΈ μ†Œμš”λœ μ‹œκ°„

1μ‹œκ°„ 20λΆ„

✨ μˆ˜λ„ μ½”λ“œ

κ·Έλ¦¬λ””μ˜ κ°œλ…μ„ 잘 μƒκ°ν•˜λ©΄μ„œ 전ꡬλ₯Ό 쳐닀보고 μžˆμœΌλ‹ˆ 문뜩 λ– μ˜€λ₯΄λ‹€κ΅¬μš”..
μ²˜μŒμ—λŠ” μ˜ˆμ œμ—μ„œ 000 -> 010 λ§Œλ“€κΈ° μ˜€λŠ”λ°
0 0 0 -> 1 1 0 -> 1 0 1 -> 0 1 0 이 있고
0 0 0 -> 1 1 0 -> 0 0 1 -> 0 1 0 이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
μœ„ λ‘κ°œμ˜ 차이점으둜

  1. μ²«λ²ˆμ§ΈλŠ” 0번 2번 1λ²ˆμ„ λˆ„λ₯΄λŠ” μˆœμ„œλ‘œ κ°€μ Έκ°”κ³ 
  2. λ‘λ²ˆμ§ΈλŠ” 0번 1번 2λ²ˆμ„ λˆ„λ₯΄λŠ” μˆœμ„œλ‘œ κ°€μ Έκ°”μŠ΅λ‹ˆλ‹€!




κ·Έλ ‡κ²Œ ν•΄μ„œ μ•ž μͺ½ 전ꡬ뢀터 κ³„μ†ν•΄μ„œ 결과값에 λ§žμΆ°κ°€λ©΄ λ˜μ§€ μ•Šμ„κΉŒ μƒκ°ν•΄μ„œ μ•„μ•„λ””μ–΄λ₯Ό λƒˆμŠ΅λ‹ˆλ‹€
예λ₯Όλ“€μ–΄ 5λ²ˆκΉŒμ§€ 있으면 0번 λ¨Όμ € νƒ€κ²Ÿμ— 맞게 1번 맞게 μ­‰~~~ ν•˜λ©΄ λ˜λ”λΌκ΅¬μš”.




μœ„μ™€ 같이 ν•˜λŠ”λ° λ’· 뢀뢄은 κ·Έλƒ₯ ꡐ체λ₯Ό ν•΄μ£Όλ©΄ λ˜λŠ”λ°

πŸ’‘ 0번 λ²„νŠΌμ˜ μ˜ˆμ™Έλ₯Ό λ”°λ‘œ λ‘¬μ•Όν•˜λ”λΌκ³ μš”

μ΄μœ λŠ” 0λ²ˆμ„ λˆ„λ₯΄λƒ μ•ˆλˆ„λ₯΄λƒμ— 따라 계산 방식 μ „λΆ€κ°€ λ‹¬λΌμ Έμ„œ κ·Έλ ‡μŠ΅λ‹ˆλ‹€.
μ•„λž˜ κ·Έλ¦Ό 예제λ₯Ό κ·Έλ¦¬λ©΄μ„œ μ΄ν•΄ν•˜λ‹ˆ μ‰½κ²Œ 이해가 κ°€λ”λΌκ΅¬μš”

001



002




μœ„μ™€ 같이 그리디λ₯Ό ν†΅ν•œ ν˜„μž¬ μƒν™©μ—μ„œ κ°€μž₯ μ’‹μ•„λ³΄μ΄λŠ” λ²„νŠΌμ„ 눌러 전ꡬλ₯Ό 킀도둝 ν–ˆμŠ΅λ‹ˆλ‹€!



μ½”λ“œλ„ λͺ‡λ²ˆ ν–‡κ°ˆλ¦¬κΈ΄ ν–ˆμ§€λ§Œ

  1. 각 0번 λ²„νŠΌμ„ μœ„ν•΄μ„œ ν•¨μˆ˜λ‘œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.
  2. λ²„νŠΌμ„ 1λ²ˆλΆ€ν„° NκΉŒμ§€ 순회
    1. i-1전ꡬλ₯Ό λΉ„κ΅ν•΄μ„œ λͺ©ν‘œμ™€ κ°™μœΌλ©΄ λ„˜μ–΄κ°€κ³ 
    2. λ‹€λ₯΄λ‹€λ©΄ i-1 ~ i+2(2번 λ²„νŠΌμ΄λ©΄ 1번, 2번, 3λ²ˆμ„ λ°”κΎΈκΈ° μœ„ν•΄)을 λ°”κΏ”μ€¬μŠ΅λ‹ˆλ‹€!
    3. 그리고 μ΅œμ’…μ μœΌλ‘œ targetκ³Ό κ°™μœΌλ©΄ count return
    4. λ‹€λ₯΄λ©΄ -1 returnν•˜λ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€!
  3. 좜λ ₯ν•˜κΈ°
    1. κ²°κ³Ό1이 -1이면 κ²°κ³Ό2 좜λ ₯
    2. κ²°κ³Ό2κ°€ -1이면 κ²°κ³Ό1 좜λ ₯
    3. λ‘˜λ‹€ -1이 μ•„λ‹ˆλ©΄ λ‘˜ 쀑 μž‘μ€ λΆ€λΆ„ 좜λ ₯ -> λ‘˜λ‹€ 진행은 λ˜μ§€λ§Œ 더 μž‘μ€κ²Œ μžˆμ„ μˆ˜λ„ 있음

μœ„μ—μ„œ i-1을 ν•˜λŠ” μ΄μœ λŠ” i둜 ν•˜κ²Œ 되면 μ΅œμ’…μ μœΌλ‘œ i+1λ²ˆμΌλ•Œ λ‹€μ‹œ λ°”λ€” 수 μžˆμœΌλ―€λ‘œ λ§ˆμ§€λ§‰μœΌλ‘œ κ±΄λ“œλ¦¬λŠ” i-1을 μ„ νƒν•˜κ²Œ λμŠ΅λ‹ˆλ‹€!

사싀 좜λ ₯을 더 κΉ”λ”ν•˜κ²Œ λ§Œλ“€ 수 μžˆμ„ 것 같은데 λ‡Œκ°€ λΉ„λͺ…을 μ§ˆλŸ¬μ„œ...




⭐️ μ΅œμ’… μ½”λ“œ

def solution(first, target, count):
    # 첫번째 λ²„νŠΌμ„ λˆ„λ₯Έ 경우 처리
    if count == 1:
        first[0] = 1 - first[0]
        first[1] = 1 - first[1]
    # λ²„νŠΌ 순회
    for i in range(1,n):
        if first[i-1] == target[i-1]:   # λ°”κΏ”μ•Όν•˜λŠ”μ§€ 비ꡐ
            continue
        count += 1
        for j in range(i-1, i+2):   # 1번이면 0~2λ²ˆκΉŒμ§€ 전ꡬ λ°”κΎΈκΈ°
            if j < n:   # n이 3μΌλ•Œ 3을 λˆ„λ₯΄λ©΄ 2,3만 λ˜λ„λ‘
                first[j] = 1 - first[j]
    if first == target:
        return count
    else :
        return -1
    
n = int(input())
first = list(map(int, input()))
target = list(map(int, input()))

# 첫번째 μ „κ΅¬μ˜ μŠ€μœ„μΉ˜λ₯Ό λˆ„λ₯΄λŠ” 경우
result1 = solution(first[:], target, 1)
# 첫번째 μ „κ΅¬μ˜ μŠ€μœ„μΉ˜λ₯Ό λˆ„λ₯΄μ§€ μ•ŠλŠ” 경우
result2 = solution(first[:], target, 0)

if result1 == -1:
    print(result2)
elif result2 == -1:
    print(result1)
else : 
    print(min(result1, result2))

πŸ“š μƒˆλ‘­κ²Œ μ•Œκ²Œλœ λ‚΄μš©

그리디 κ°œλ…μ„ μ–΄μ œ μ–΄λŠμ •λ„ μ •λ¦¬ν•˜κ³  였늘 문제λ₯Ό ν’€μ–΄λ΄€λŠ”λ° ν’€λ €μ„œ 기뢄이 μ’‹λ„€μš”!! 근데 0번 λ²„νŠΌ 처리λ₯Ό λ”°λ‘œ ν•΄μ€˜μ•Ό ν•˜λŠ” λΆ€λΆ„μ—μ„œ λ§‰ν˜€μ„œ μž μ‹œ 인터넷 μ°Έμ‘°λ₯Ό ν–ˆμ—ˆμŠ΅λ‹ˆλ‹€!

Copy link
Collaborator

@wkdghdwns199 wkdghdwns199 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

해섀을 λ³΄λ©΄μ„œ 이해가 μ•ˆλ˜λŠ” 뢀뢄이 μžˆλŠ”λ°, 순차적으둜 λ²„νŠΌμ„ λˆ„λ₯΄λŠ” 것이 μ•„λ‹Œ λ‹€λ₯Έ μœ„μΉ˜μ˜ λ²„νŠΌμ„ λ¨Όμ € λˆ„λ₯΄λŠ” 것이 μ΅œμ†Œμ˜ λ²„νŠΌ λˆ„λ₯΄λŠ” νšŸμˆ˜κ°€ 될 μˆ˜λ„ μžˆμ§€ μ•Šλ‚˜μš”? λ‹€λ₯Έ 해섀듀도 λ³΄λŠ”λ° λ―Όμ„λ‹˜κ³Ό 같은 ν•΄μ„€μ΄λ”λΌκ΅¬μš”..! πŸ€”

Copy link
Member

@fnzksxl fnzksxl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

import sys

input = sys.stdin.readline

N = int(input())

_init = list(map(int, input().rstrip()))
_goal = list(map(int, input().rstrip()))
tr_init = _init.copy()
tr_init[:2] = [0 if j else 1 for j in _init[:2]]

def return_cnt(_init, _goal):
  cnt = 0
  for i in range(1,len(_init)):
    if _init[i-1] == _goal[i-1]:
      continue
    
    _init[i-1:i+2] = [0 if j else 1 for j in _init[i-1:i+2]]
    cnt += 1
  
  if _init == _goal:
    return cnt
  else:
    return -1

tr = return_cnt(tr_init, _goal)
not_tr = return_cnt(_init, _goal)

if not_tr >= 0:
  print(not_tr)
elif tr >= 0:
  print(tr+1)
else:
  print(-1)

μ²˜μŒμ—λŠ” λ‹€λ₯Έ μ „κ΅¬μ—μ„œ λ³€ν™˜μ„ μ‹œλ„ν–ˆμ—ˆλŠ”λ° 그러면 μ•žμ˜ 전ꡬ μƒνƒœκ°€ 보μž₯이 μ•ˆ λ˜λ”λΌκ΅¬μš”.
κ·Έλž˜μ„œ λ°”λ‘œ λ’€ μ „κ΅¬μ—μ„œ λ³€ν™˜ν•˜λŠ” 걸둜 ν•΄μ„œ μ½”λ“œλ₯Ό μ§°λŠ”λ° λ§‰λ§‰ν•΄μ„œ λ―Όμ„λ‹˜ 풀이λ₯Ό μ’€ μ°Έκ³ ν–ˆμŠ΅λ‹ˆλ‹€.
0번째 인덱슀 λ³€ν™” μœ λ¬΄κ°€ μ€‘μš”ν–ˆλ˜ κ±°λ„€μš”..

@alstjr7437
Copy link
Member Author

alstjr7437 commented Feb 20, 2024

해섀을 λ³΄λ©΄μ„œ 이해가 μ•ˆλ˜λŠ” 뢀뢄이 μžˆλŠ”λ°, 순차적으둜 λ²„νŠΌμ„ λˆ„λ₯΄λŠ” 것이 μ•„λ‹Œ λ‹€λ₯Έ μœ„μΉ˜μ˜ λ²„νŠΌμ„ λ¨Όμ € λˆ„λ₯΄λŠ” 것이 μ΅œμ†Œμ˜ λ²„νŠΌ λˆ„λ₯΄λŠ” νšŸμˆ˜κ°€ 될 μˆ˜λ„ μžˆμ§€ μ•Šλ‚˜μš”? λ‹€λ₯Έ 해섀듀도 λ³΄λŠ”λ° λ―Όμ„λ‹˜κ³Ό 같은 ν•΄μ„€μ΄λ”λΌκ΅¬μš”..! πŸ€”

1 0 1 1

1번 클릭 > 4번 클릭
4번 클릭 > 1번 클릭

0 1 0 0

0 0 0 0 0

3번 클릭

0 1 1 1 0

μœ„μ™€ 같이 μ–΄μ§œν”Ό μ–΄λ–€ λ²„νŠΌμ„ λˆ„λ₯΄λŠ”μ§€λŠ” λ˜‘κ°™κ²Œ λ‚˜μ˜€κ³  λ²„νŠΌ 횟수의 μ°¨μ΄λŠ” 없을 것 κ°™μ•„μš”!!
λŒ€μ‹  λ‹€λ₯Έ μœ„μΉ˜μ˜ λ²„νŠΌμ„ λ¨Όμ € λˆ„λ₯΄κ²Œ 되면 2번째 μ˜ˆμ œμ—μ„œ 처럼 1번 2번 μ•ˆλˆ„λ₯΄κ³  3λ²ˆμ— κ°€λŠ” 것과 3번 λ°”λ‘œ κ°€λŠ” κ²ƒμœΌλ‘œ
닡을 μ°ΎλŠ” 속도가 λΉ¨λΌμ§€λ‹ˆ μ‹œκ°„λ³΅μž‘λ„κ°€ μ’‹κ² μ§€λ§Œ
νƒœμ›λ‹˜μ΄ μœ„μ— λ§ν•˜μ‹ λŒ€λ‘œ μ•žμ— μ „κ΅¬μ˜ μƒνƒœκ°€ 보μž₯이 μ•ˆλ˜μ„œ μ•„μ˜ˆ 닡이 μ•ˆλ˜λŠ” κ²½μš°κ°€ 생길 μˆ˜λ„ μžˆμ–΄μ„œ 그런 것 κ°™λ„€μš”!(개인적인 μƒκ°μž…λ‹ˆλ‹€)

@alstjr7437 alstjr7437 merged commit b4ade6a into main Feb 20, 2024
@alstjr7437 alstjr7437 deleted the 9-alstjr7437 branch February 26, 2024 13:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants