10일차 문제

양진혁·2021년 11월 11일
0

문제풀이

첫번째 문제는 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에서 제외한다.

0개의 댓글