본문 바로가기

개발/Algorithm 문제 풀이42

[Python] 비트마스킹 정리 1. 진법 변환 #10진수 -> n진수 변환 : bin(NUM), oct(NUM), hex(NUM) num = 18 print(bin(num)) #2진수. 0b10010 print(oct(num)) #8진수. 0o22 print(hex(num)) #16진수. 0x12 # n진수 -> 10진수 변환 : int(NUM, 현재 진수) num = '10010' print(int(num, 2)) num = '22' print(int(num, 8)) num = '12' print(int(num, 16)) # 결과 모두 18 2. 연산자 AND : & OR : | XOR : ^ NOT : ~ Shift : > 예시) 9 = 0b1001, 5 = 0b101 AND OR XOR 9 & 5 = 0b1 = 1 9 | 5 =.. 2020. 8. 28.
선택 안됨 [Python] 비트마스킹 - 11723 집합 https://www.acmicpc.net/problem/11723 11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net 풀이 : add는 or 연산이므로 |= remove는 not 입력값과 and연산이므로 &= !(INPUT) toggle xor 연산이므로 ^= 을 하면 된다. 1. Python import sys sett = 0 inpt = sys.stdin.readline for _ in range(int(inpt())): comand = inpt().split() if comand[0] == 'add' : sett |= (1 2020. 8. 28.
[Python] 비트마스킹 - 1094 막대기 https://www.acmicpc.net/problem/1094 1094번: 막대기 지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대�� www.acmicpc.net 풀이 결론부터 말하자면 입력값을 2진수로 변환했을때 1의 갯수를 찾는 문제이다. 합이 X가될때까지 계속 2로 나누고 하나를 버려야하니 2진수로 표현하는 것과 같다. 물론 구현 방식으로도 풀 수 있다. 코드 1. 입력값을 binary로 바꿔서 1의 갯수 세기 X = int(input()) answer = 0 X = bin(X) for x in X: if x == '1': answer += 1.. 2020. 8. 28.
[Python] 카카오 2019 - 블록 게임 https://programmers.co.kr/learn/courses/30/lessons/42894 코딩테스트 연습 - 블록 게임 [[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,4,0,0,0],[0,0,0,0,0,4,4,0,0,0],[0,0,0,0,3,0,4,0,0,0],[0,0,0,2,3,0,0,0,5,5],[1,2,2,2,3,3,0,0,0,5],[1,1,1,0,0,0,0,0,0,5]] 2 programmers.co.kr 풀이 유튜브 ezsw 에서 c++로 풀이 해주신 거(링크)를 python으로 짠 코드이다. 각 모양의 블럭을 어떻게 찾아야하나 DFS라도 해야하나 .. 2020. 8. 19.
[Python] 카카오 2018 - 방금 그 곡 나의 풀이 import re def poundSign(m): m = re.sub(r'\w#', lambda x : x.group(0).lower()[0], m) return m def solution(m, musicinfos): ans ="(None)" ansT = -1 ans_dict = {} m = poundSign(m) for song in musicinfos: splt = re.split('[,:]', song) playingT = (int(splt[2]) - int(splt[0]))*60 + int(splt[3]) - int(splt[1]) splt[5] = poundSign(splt[5]) played = splt[5] * (playingT // len(splt[5])) + splt[5][:p.. 2020. 8. 19.