From af30442667de765719b0198b30a29ac3a7eae8a7 Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sat, 12 Jul 2025 21:57:55 +0900 Subject: [PATCH 1/4] =?UTF-8?q?[BOJ]#11723.=20=EC=A7=91=ED=95=A9/=EC=8B=A4?= =?UTF-8?q?=EB=B2=845/30min?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://www.acmicpc.net/problem/11723 --- .../\354\247\221\355\225\251.py" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 "Hongjoo/\353\260\261\354\244\200/\354\247\221\355\225\251.py" 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 From df3fb18ef2686decd8af84c598a631360483a431 Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sat, 12 Jul 2025 21:58:22 +0900 Subject: [PATCH 2/4] =?UTF-8?q?[PGS]#12953.=20N=EA=B0=9C=EC=9D=98=20?= =?UTF-8?q?=EC=B5=9C=EC=86=8C=EA=B3=B5=EB=B0=B0=EC=88=98/lv2/1h(=ED=9E=8C?= =?UTF-8?q?=ED=8A=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://school.programmers.co.kr/learn/courses/30/lessons/12953 --- ...14\352\263\265\353\260\260\354\210\230.py" | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 "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" 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 From bbaa8e8ede0f5ba46234eb6c5724c243befb09cc Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sat, 12 Jul 2025 21:58:31 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[PGS]#42746.=20=EA=B0=80=EC=9E=A5=20?= =?UTF-8?q?=ED=81=B0=EC=88=98/lv2/1h(=ED=9E=8C=ED=8A=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://www.programmers.co.kr/learn/courses/30/lessons/42746 --- ...00\354\236\245\355\201\260\354\210\230.py" | 39 +++++-------------- 1 file changed, 9 insertions(+), 30 deletions(-) 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 From 4d3c4b55bcd72a2998da4caebdb0503a0a81953c Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sat, 12 Jul 2025 21:58:43 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[PGS]#42577.=20=EC=A0=84=ED=99=94=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EB=AA=A9=EB=A1=9D/lv2/=EC=8B=A4=ED=8C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://school.programmers.co.kr/learn/courses/30/lessons/42577 --- ...10\355\230\270\353\252\251\353\241\235.py" | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 "Hongjoo/lv2/\354\240\204\355\231\224\353\262\210\355\230\270\353\252\251\353\241\235.py" 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