diff --git "a/Hongjoo/lv2/N\352\260\234\354\235\230\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230.py" "b/Hongjoo/lv2/N\352\260\234\354\235\230\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230.py" new file mode 100644 index 0000000..453cead --- /dev/null +++ "b/Hongjoo/lv2/N\352\260\234\354\235\230\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230.py" @@ -0,0 +1,40 @@ +""" +링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12953 + +n개의 숫자들의 최소 공배수 +Inspect :n 개의 숫자들이 모두 "1" 이 될 때 까지 2~100의 자연수들의 값으로 나누기 +ex) +[2,6,8,14] +e = 2 : [1,3,4,7] => elements = [2] +e = 3 : [1.1.4.7] => elements = [2,3] +e = 4 : [1,1,1,7] => elements = [2,3,4] +e = 5 : [1,1,1,7] => 유지 +e = 6 ... + +""" +def solution(arr) : + answer = 1 + elements = [] + + e = 2 + # 1. + while e<=100 or arr.count(1) != len(arr) : + + flag = False + #2. 해당 e 로 배열 arr 가 나누어 떨어지는 지 확인 -> 떨어지면 flag = True , 해당 arr[k] 은 e의 몫으로 구성함 + for k in range(len(arr)) : + if arr[k] == 1 : + continue + if arr[k] % e == 0 : + arr[k] =arr[k] // e + flag = True + #3. 해당 e 값이 배열 arr 의 값 중 하나 이상의 구성 요소일때 , 최소공배수 구성워소 elements 배열에 추가 + if flag : + elements.append(e) + else : # 해당 값이 구성 원소 아닐 경우 -> 다음 e 로 다시 도전하기 + e+= 1 + + + for e in elements : + answer*= e + return answer diff --git "a/Hongjoo/lv2/\352\260\200\354\236\245\355\201\260\354\210\230.py" "b/Hongjoo/lv2/\352\260\200\354\236\245\355\201\260\354\210\230.py" index a96040f..1660905 100644 --- "a/Hongjoo/lv2/\352\260\200\354\236\245\355\201\260\354\210\230.py" +++ "b/Hongjoo/lv2/\352\260\200\354\236\245\355\201\260\354\210\230.py" @@ -1,35 +1,14 @@ """ -실패 -1. 가장 큰 자리수 비교 -> 자리수 가장 작은 수 -0. graph -idx : numbers -value : [0,0,0,-1] # ex 62 => [6,2,False,False] -# 조건 2. -3,30,300 비교 -> 3 > 30> 300 우선순위 -#반례 -1) 110 vs 1 > 1+110 -2) [12, 1213] -> 1213+12 +https://www.programmers.co.kr/learn/courses/30/lessons/42746 """ def solution(numbers): - answer = '' - #0. graph 만들기 - graph = list() - for n in numbers: - p = 4-len(str(n)) - if p > 0 : - douple_n = str(n)*p - else : - douple_n = str(n) - graph.append([douple_n[:4], p ]) # 자리수 맞춰주기(4자리) - # print(graph) - #2.정렬 : 높은 자리수의 값이 큰 순서 대로 - graph.sort(key=lambda x : x[0] , reverse = True) - # print(graph) - #3. 합치기 - answer="" - for i in range(len(graph)): - num = graph[i][0] ; position = 4-graph[i][1] - answer += str(int(num[:position]))# "000","0" 경우 0으로 처리 - + # 1. number의 같은 길이에 대해서 크기 비교하기 + numbers_str = [str(num) for num in numbers ] # 문자열로 변환 + numbers = sorted(numbers_str ,key = lambda x: x*3 , reverse = True ) + #2. 리스트 원소를 1개의 문자열로 출력 형식 충족하기 + # answer = "".join(numbers) + # print(answer , type(answer)) + answer = str(int("".join(numbers))) + # print(answer , type(answer)) return answer \ No newline at end of file diff --git "a/Hongjoo/lv2/\354\240\204\355\231\224\353\262\210\355\230\270\353\252\251\353\241\235.py" "b/Hongjoo/lv2/\354\240\204\355\231\224\353\262\210\355\230\270\353\252\251\353\241\235.py" new file mode 100644 index 0000000..5a62d8b --- /dev/null +++ "b/Hongjoo/lv2/\354\240\204\355\231\224\353\262\210\355\230\270\353\252\251\353\241\235.py" @@ -0,0 +1,26 @@ +""" +https://school.programmers.co.kr/learn/courses/30/lessons/42577 +""" + +def solution(phone_book): + answer = True + #1. 글자수로 정렬하기 + phone_book = sorted(phone_book , key = lambda x : (len(x))) + #2. key = 전번인 해쉬맵 생성 + hash_map = {} + for phone in phone_book : + hash_map[phone] = 1 + #3. hashmap에 접두어 비교하기 + for phone in phone_book : + tmp = "" + # 접두어 한 글자씩 추가해서 hasp_map의 key들 중에 같은게 있는지 확인 + for n in phone : + tmp += n + if tmp in hash_map and tmp!= phone : + answer = False + + + + + + return answer \ No newline at end of file diff --git "a/Hongjoo/\353\260\261\354\244\200/\354\247\221\355\225\251.py" "b/Hongjoo/\353\260\261\354\244\200/\354\247\221\355\225\251.py" new file mode 100644 index 0000000..4a3cf04 --- /dev/null +++ "b/Hongjoo/\353\260\261\354\244\200/\354\247\221\355\225\251.py" @@ -0,0 +1,36 @@ +""" +[BOJ]#11723. 집합 / 실버5 / 비트마스킹 +문제 : https://www.acmicpc.net/problem/11723 +# PROBLEM +add x / remove x / check x . toggle x / +all , empty +""" +import sys +input = sys.stdin.readline +# answer = [] +M = int(input()) +s = [ 0 for _ in range(21)] # 1<=x <=20 숫자 제한 존재함 +for _ in range(M) : + operations = list(input().split()) + # 1. empty, all + if len(operations) <2 : + if operations[0] == "all" : + s = [1 for _ in range(21)] + elif operations[0] == "empty" : + s = [0 for _ in range(21)] + # 2. add, remove , check , toggle + else : + ops , x = operations + if ops == "add" : + s[int(x)] = s[int(x)] | 1 + elif ops == "remove" : + s[int(x)] = s[int(x)] & 0 + elif ops == "check" : + print(s[int(x)]) + # answer.append(s[int(x)]) + elif ops == "toggle" : # NAND - 같으면 0 , 다르면 1 + s[int(x)] = s[int(x)]^1 + +# #3. 결과 출력 +# for a in answer: +# print(a) \ No newline at end of file