- 문제
https://school.programmers.co.kr/learn/courses/30/lessons/70129
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 소스코드(DFS)
binary_cnt = 0
def dfs(s, cnt):
global binary_cnt
if s == "1":
return [cnt, binary_cnt]
cnt += 1
binary_cnt += s.count("0")
s = bin(s.count("1"))[2:]
return dfs(s, cnt)
def solution(s):
return dfs(s, 0)
- 해설
이 문제도 DFS 공부를 위해 재귀적으로 풀어본 문제이다 이문제는 주어진 이진수의 0을 제거하고 만들어진 수를 다시 이진화 하여 0을 몇번 없애는 지 구하는 문제이다.
글러벌 변수로 0을 몇번 없앴는지 변수로 설정하고 dfs를 들어와 수행 할때마다 cnt를 증가시켜 구하는 식으로 하였다.
이문제의 핵심은 count 함수와 bin을 사용하여 간단하게 구현한 부분이다. bin을 사용할 때 주의 할 점은 bin을 사용하면 앞에 "0b" 가 생기므로 슬라이싱을 사용하여 필요한 부분만 사용하게 하는 것 과 DFS의 종료조건이 중요하다. 문제에 "1" 이 될때 까지 라고 하여 dfs의 수행 cnt 와 글로벌 변수 binary_cnt 를 리턴 하여 문제를 풀었다.
'Algorithm' 카테고리의 다른 글
| [leetCode 80번] Remove Duplicates from Sorted Array II (Java) (0) | 2023.08.24 |
|---|---|
| [leetCode 26번] Remove Duplicates from Sorted Array (Java) (0) | 2023.08.24 |
| [leetCode 27번] Remove Element (JAVA) (0) | 2023.08.24 |
| [leetCode 88 번] Merge Sorted Array (Java) (0) | 2023.08.23 |
| 프로그래머스 DFS (타겟 넘버) - Python (0) | 2023.07.20 |