본문 바로가기

WINK-(Web & App)/개인 스터디 & 프로젝트

알고리즘 2인 스터디 #6주차 - 이총명

반응형

문제 설명 : 그냥 소인수 분해해서 소인수를 한 줄에 하나씩 출력하면 됨.

내 코드 :

n = int(input())
i = 2
goal = n
output_li = []

while i <= goal:
    while n % i == 0:
        n = n // i
        output_li.append(i)
    i += 1

for i in range(len(output_li)):
    print(output_li[i])

코드 설명 : 그냥 리얼루다가 goal = 2부터 n까지 쭉 올라가면서 일일히 나눠지나 안나눠지나 보는겁니다.

goal에 4가 들어가도 괜찮은 이유는 이미 2로 나눠지는 한계까지 나눠놓고 진행되기 때문입니다.(이것까지 생각한 건 아닌데 어쩌다보니 얻어걸렸네요 ㅋㅋㅋ)

뭔가 수학 잘하면 저 goal을 n까지 올릴필요는 없었을 것 같은데 수학을 잘 못해서 그냥 브루트포스마냥 무지성으로 다 넣는식으로 해봤습니다;;

 

문제 설명 : 난쟁이 키를 입력으로 9개를 주는데 이 중에 아무거나 7개를 골라서 그 합이 100이면 오름차순으로 출력하면 됨

 

내 코드 :

height_li = []

for i in range(9):
    h = int(input())
    height_li.append(h)
height_li = sorted(height_li)
bb = 1

for a in range(3):
    for b in range(1, 4):
        for c in range(2, 5):
            for d in range(3, 6):
                for e in range(4, 7):
                    for f in range(5, 8):
                        for g in range(6, 9):
                            if (
                                int(
                                    height_li[a]
                                    + height_li[b]
                                    + height_li[c]
                                    + height_li[d]
                                    + height_li[e]
                                    + height_li[f]
                                    + height_li[g]
                                )
                                == 100
                            ) and bb == 1:
                                print(
                                    height_li[a],
                                    "\n",
                                    height_li[b],
                                    "\n",
                                    height_li[c],
                                    "\n",
                                    height_li[d],
                                    "\n",
                                    height_li[e],
                                    "\n",
                                    height_li[f],
                                    "\n",
                                    height_li[g],
                                    sep="",
                                )
                                bb = 0

코드 설명 : 왜 코드가 저따구냐 할 수도 있다. 하지만 나름 효율적이다. 일단 난쟁이 키에 대한 입력 9개를 받아서

리스트에 넣고 정렬해준다. 7중 for문을 사용해서 a+b+c+d+e+f+g가 100일때 값을 출력하고 종료되게 했다. a,b,c,d,e,f,g는 각각 한 난쟁이의 키다. 7중 for문이라서 break로는 어림도 없고 bb=1일때 출력하게 해서 결과에 도달했을때 한 번만 출력하고 나머지때는 출력되지 않게만했다. 

 

문제 설명 : aba 처럼 한 알파벳이 끊어지면 안되고 aabb나 apbkhl 이런식이여야됨

내 코드 :

n = int(input())
cnt = n
for _ in range(n):

    word = input()
    word_list = list(word)
   
    nomore = []
    for  i in range(len(word_list)): #핵심파트
        if word_list[i] in nomore:
            if word_list[i] != word_list[i-1]:
                cnt -= 1
                break
        else:
            nomore.append(word_list[i])

print(cnt)

word에 문자열을 입력받고 문자 하나하나를 쪼개서 리스트에 넣고 word_list에 넣어준다.

for문으로 word_list에서 인덱스 0부터 하나하나 올라가는데 이때 알파벳의 이어짐이 끊겼으면 그 알파벳이 뒤에 또 등장하면 안되는거니까 nomore이라는 리스트에 넣어줬다. cnt는 그룹단어수를 뜻하고 n부터 시작해서 진행하면서 차감하는식으로 코딩했다.만약에 word_list[i]가 nomore에 들어있으면서 word_list[i] != word_list[i-1]이라면 (즉 알파벳이 이어져 있는게 아니라면 그룹단어가 아닌거니까 cnt를 1 깎아줬다.

반응형