Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions Hongjoo/lv2/N개의최소공배수.py
Original file line number Diff line number Diff line change
@@ -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
39 changes: 9 additions & 30 deletions Hongjoo/lv2/가장큰수.py
Original file line number Diff line number Diff line change
@@ -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
26 changes: 26 additions & 0 deletions Hongjoo/lv2/전화번호목록.py
Original file line number Diff line number Diff line change
@@ -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
36 changes: 36 additions & 0 deletions Hongjoo/백준/집합.py
Original file line number Diff line number Diff line change
@@ -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)