-
[프로그래머스] N으로 표현코딩테스트 2024. 12. 31. 00:09
https://school.programmers.co.kr/learn/courses/30/lessons/42895
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr

과정:
아래 풀이는 일부 테스트 결과에서 실패 발생
def solution(N, number): answer = 0 cal_list = [[N],[],[],[],[],[],[],[]] if N == number: #아래 for문은 cal_list의 1번째 인덱스부터 고려되므로 0번째 인덱스의 값이 number와 동일할때를 추가함 return 1 #N이 하나일때 number와 동일 ex) N=5,number=5 for i in range(1,8): #1~7 if int(str(N)*(i+1)) == number: #NNN.. ex) N=5,number=555 return i+1 else: cal_list[i].append(int(str(N)*(i+1))) for j in range(i): for x in cal_list[j]: if x+int(str(N)*(i-j)) == number: #더하기 return i+1 else: cal_list[i].append(x+int(str(N)*(i-j))) if x-int(str(N)*(i-j)) == number: #빼기 return i+1 else: cal_list[i].append(x-int(str(N)*(i-j))) if x*int(str(N)*(i-j)) == number: #곱하기 return i+1 else: cal_list[i].append(x*int(str(N)*(i-j))) if x//int(str(N)*(i-j)) == number: #나누기 return i+1 else: cal_list[i].append(x//int(str(N)*(i-j))) return -1예시를 통한 풀이
ex) 5와 사칙 연산으로 표현 할 수 있는 숫자들
5가 1개: 5
5가 2개: 5+5, 5-5, 5*5, 5//5, 55
5가 3개: 5+5(4)5, 5-5(4)5, 5*5(4)5, 5//5(4)5, 55(4)5, 555, 5//55, 5+55, 5-55, 5*55
...
※ (4) == 사칙연산들( +, -, *, // )
5가 3개
i) (4)555 : 0+555 0-555 0*555 0//555
ii) 5(4)55 : 5+55 5-55 5//55 5*55
iii) 55(4)5 : 5(2)4(5) 5+5+5 ...
5가 5개
5(0)4(55555)
5(1)4(5555)
5(2)4(555)
5(3)4(55) => 5+5+5+55 5+5-5+55 5*5//5+55 55+5+55
5(4)4(5)예시를 통한 풀이 + 실패 이유
ex) 5와 사칙 연산으로 표현 할 수 있는 숫자들
5가 1개: 5
5가 2개: 5+5, 5-5, 5*5, 5//5, 55
5가 3개: 5+5(4)5, 5-5(4)5, 5*5(4)5, 5//5(4)5, 55(4)5, 555, 5//55, 5+55, 5-55, 5*55
5-(5(4)5), 5//(5(4)5) <- 이 부분을 놓침 연산 순서에 따라 영향을 받는 -,// 연산을 고려해야됨
...
※ (4) == 사칙연산들( +, -, *, // )def solution(N, number): answer = 0 cal_list = [[N],[],[],[],[],[],[],[]] if N == number: #아래 for문은 cal_list의 1번째 인덱스부터 고려되므로 0번째 인덱스의 값이 number와 동일할때를 추가함 return 1 #N이 하나일때 number와 동일 ex) N=5,number=5 for i in range(1,8): #1~7 if int(str(N)*(i+1)) == number: #NNN.. ex) N=5,number=555 return i+1 else: cal_list[i].append(int(str(N)*(i+1))) for j in range(i): for x in cal_list[j]: if x+int(str(N)*(i-j)) == number: #더하기 return i+1 else: cal_list[i].append(x+int(str(N)*(i-j))) if x-int(str(N)*(i-j)) == number: #빼기 return i+1 else: cal_list[i].append(x-int(str(N)*(i-j))) if x*int(str(N)*(i-j)) == number: #곱하기 return i+1 else: cal_list[i].append(x*int(str(N)*(i-j))) if x//int(str(N)*(i-j)) == number: #나누기 return i+1 else: cal_list[i].append(x//int(str(N)*(i-j))) #-,//추가 if int(str(N)*(i-j))-x == number: return i+1 else: cal_list[i].append(int(str(N)*(i-j))-x) if x != 0: if int(str(N)*(i-j))//x == number: return i+1 else: cal_list[i].append(int(str(N)*(i-j))//x) return -1'코딩테스트' 카테고리의 다른 글
[프로그래머스] 디스크 컨트롤러 - python (0) 2024.12.31 [프로그래머스] 더 맵게 - python (0) 2024.12.31 [프로그래머스] 정수 삼각형- python (0) 2024.12.15 [BAEKJOON] 이친수 - python (1) 2024.06.16 [BAEKJOON] 오르막 수 - python (0) 2024.06.16