프로그래머스(파이썬)
짝지어 제거하기→크레인 인형 뽑기와 유사★★
짝지어 제거하기 def solution(s): stack=[] s=list(s) for i in range(len(s)): stack.append(s[i]) if len(stack)>=2: if stack[-1]==stack[-2]: stack.pop() stack.pop() if len(stack)==0: return 1 else: return 0 ▶ stack의 구조를 이용한다.
카펫→ 약수는 제곱근까지만 구하기, 2차원 리스트 요소2개 x,y로 접근★★
나의 풀이 from math import * def solution(brown, yellow): divisor = [] for i in range(1, int(sqrt(yellow))+1): if yellow % i ==0: divisor.append([yellow//i, i]) for y_width, y_height in divisor: if brown ==(y_width+2)*(y_height+2)-yellow: a, b=y_width+2, y_height+2 return a,b ▶ 일단 yellow의 약수의 순서쌍을 구한다. 다만, sqrt(n)까지만 구한다. ▶ 2차원 리스트의 각 행의 요소가 2개인 경우 y_width, y_height 2개의 임시변수로 접근할 수 있다. ▶ if brown ==..
다음 큰 숫자★→count()함수, int('숫자문자열', n)→n진법의 '숫자문자열'을 10진수로
나의 풀이 def solution(n): binary=bin(n)[2:] while(True): n=n+1 compare=bin(n)[2:] if binary.count('1') == compare.count('1'): answer=int(compare, 2) break return answer 다른 사람의 풀이 def nextBigNumber(n): num1 = bin(n).count('1') while True: n = n + 1 if num1 == bin(n).count('1'): break return n ▶ 사람 생각은 다 비슷비슷하다. ▶ 1의 갯수를 count하기 위해서 파이썬의 count() 함수를 잘 활용하자
이진변환 반복하기→ 특정 요소 제거★★
나의 풀이 def solution(s): cycle=0 c=s zero_cnt=0 while len(c)!=1: cycle+=1 remove_set=['0'] zero_removed = [i for i in c if i not in remove_set] zero_cnt+=len(c)-len(zero_removed) digit=len(zero_removed) binary=str(bin(digit)) binary=binary[2:] c=binary return [cycle, zero_cnt] 다른 사람의 풀이 def solution(s): a, b = 0, 0 while s != '1': a += 1 num = s.count('1') b += len(s) - num s = bin(num)[2:] return..