첫번째 문제는 5kyu 난이도 문제로
Example: n = 86240 should return "(25)(5)(72)(11)"
소인수분해하는 문제이다.
def factorization(x): aa=[] count = {} bb=[] cc="" d = 2 while d <= x: if x % d == 0: aa.append(d) x = x / d else: d = d + 1 for i in aa: try: count[i] += 1 except: count[i]=1 for k,v in count.items(): bb.append([k,v]) for i in range(len(bb)): if bb[i][1] !=1: cc+= "("+str(bb[i][0])+"**"+str(bb[i][1])+")" else: cc+= "("+str(bb[i][0])+")" return cc print(factorization(7775460))
맨 먼저 소인수분해를 진행하는 while문을 작성한 후 결과를 dict형태로 만들어서 key value 값을 나눠준다. 그 후 value의 값에 따라 결과를 작성했다.
두번째 문제는 5kyu 난이도 문제로
a = ["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]
test.assert_equals(dirReduc(a), ['WEST'])
north가 반대되는 south를 만나면 둘다 없어지게 해야한다.
def dirReduc(arr): emptylist=[] nsew= {"NORTH":"SOUTH","SOUTH":"NORTH","WEST":"EAST","EAST":"WEST"} for i in range(0,len(arr)): if len(emptylist) == 0: emptylist.append(arr[i]) elif emptylist[-1] != nsew[arr[i]]: emptylist.append(arr[i]) else: emptylist.pop() return emptylist
dict을 이용해서 key value를 서로 반대되는 방향으로 설정했다. 그 후 emptylist가 비어있으면 추가, 그렇지 않으면 emptylist의 마지막 요소와 nsew의 value를 확인해 일치하면 pop을 통해서 list에서 제외한다.