[백트래킹, 코드트리] 아름다운 수
2023. 8. 15. 17:00ㆍ프로그래밍/자료구조 및 알고리즘
반응형
반응형
내 코드 - 일부 케이스를 잡아내지 못했음.
n = int(input())
# 1 ~ 4 의 수로, 그 중 연달아 같은 수가 나오는 숫자 - 아름다운 수
# 동일한 숫자에 대해 정확히 해당 숫자만큼 연달아 같은 묶음 (111 : 1이 1번 - 3번 / 222222222 : 2가 2번이 4번)
# 1 이 1번, 2가 2번, 3이 3번 (단일 연속)
# 222의 경우 22 / 21 이라서 아름다운 수가 아님...! (2가 3번 나오면 안되고, 정확히 2번 나와야 함으로 인지)
# out : n자리의 아름다운 수가 몇 개인지 ?
# Step 1 : n 자리의 1 ~ 4로 꾸려진 수를 먼저 출력해야 함.
# Step 2 : 각 수들에 대한 아름다운 수 여부를 검사
answer = []
beautiful_num_cnt = 0
def check_beautiful(number):
# check whether the condition satisfied or not
cnt = 0
for idx, _num in enumerate(number):
if idx != 0:
if _num == _target:
cnt += 1
else:
if cnt != _target:
return False
cnt = 0
_target = _num
if cnt == int(_target):
cnt = 0
else:
continue
else:
_target = _num
if _target != cnt and cnt != 0:
return False
return True
# Test set
print(check_beautiful(str(433)))
def choose(curr_num):
global beautiful_num_cnt
if curr_num == n + 1:
number = "".join(answer)
# print(number)
if check_beautiful(number):
print(number)
beautiful_num_cnt += 1
return
for i in range(1, 5): # 1 ~ 4까지
answer.append(str(i))
choose(curr_num + 1)
answer.pop()
return
choose(1)
print(beautiful_num_cnt)
이유 : 연속되는 숫자가 달라질 때도 그대로 숫자가 반영됨, 연속되는 숫자 단위로 검사해서 갯수가 맞는지 보면 됨.
또한, 애초에 검사할 필요성이 없는 숫자들에 대한 예외처리가 되지 않음..!
수정한 답(해설 참조했습니당^^) :
n = int(input())
ans_count = 0
number = []
def isBeautiful(num_arr):
idx = 0
while idx < n:
# 애초에 검사할 필요성이 없을 경우 : 걸지 않으면 indexerror 발생
if idx + num_arr[idx] - 1 >= n :
return False
for jdx in range(idx, idx+num_arr[idx]) :
if number[jdx] != number[idx] :
return False
idx += num_arr[idx]
return True
def choose(curr_pos):
global ans_count
if curr_pos > n :
if isBeautiful(number) :
ans_count += 1
return
for k in range(1, 5):
number.append(k)
choose(curr_pos+1)
number.pop()
return
choose(1)
print(ans_count)
https://www.codetree.ai/missions/2/problems/beautiful-number?utm_source=clipboard&utm_medium=text
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
반응형
'프로그래밍 > 자료구조 및 알고리즘' 카테고리의 다른 글
[백트래킹, 백준] N과 M (1), (2) <중복을 허용하지 않는 순열, 조합> (1) | 2023.09.03 |
---|---|
[프로그래머스] 숫자의 표현 - 파이썬 풀이 (0) | 2023.02.14 |
[프로그래머스] Lv.0 안전지대 파이썬 코드 풀이 (0) | 2023.01.24 |
[자료구조, 파이썬] 리스트, 딕셔너리, 튜플(list, dict, tuple) (0) | 2023.01.18 |
[프로그래머스] 코딩테스트 연습 - 이중우선순위큐 풀이 (파이썬) (1) | 2023.01.03 |