전체 글 215

[Javascript] svg 드래그 이동시 정확히 마우스 위치로 이동시키기

const drag = () => { const svg = document.querySelector('svg'); let isDragging = false; let startClientX, startClientY; let startViewBoxX, startViewBoxY; let viewport_width, viewport_height; let newX, newY; let initialScale; svg.addEventListener('mousedown', (e) => { let [x, y, width, height] = svg.getAttribute('viewBox').split(' ').map(Number); isDragging = true; startClientX = e.clientX; start..

Code/Javascript 2023.11.13

[Javascript] 마우스 휠(스크롤)을 이용한 svg 확대/축소 줌 기능 구현

window.addEventListener("DOMContentLoaded", (event) => { const svg = document.querySelector('svg'); // zooming svg.onwheel = function (event) { event.preventDefault(); // set the scaling factor (and make sure it's at least 10%) let scale = event.deltaY / 1000; scale = Math.abs(scale) < .1 ? .1 * event.deltaY / Math.abs(event.deltaY) : scale; // get point in SVG space let pt = new DOMPoint(event...

Code/Javascript 2023.11.09

[Python] 백준 1016 제곱 ㄴㄴ 수

에라토스테네스의 체의 원리를 응용한 문제 시간 복잡도를 위해 제곱수 판별에 해당 원리를 응용한다. # 제곱 ㄴㄴ 수 # 어떤 정수 X가 1보다 큰 제곱수로 나누어 떨어지지 않을 때, 그 수를 제곱ㄴㄴ수라고 한다. # 첫째 줄에 두 정수 min과 max가 주어진다. # 첫째 줄에 min보다 크거나 같고, max보다 작거나 같은 제곱ㄴㄴ수의 개수를 출력한다. import math min, max = map(int, input().split()) check = [False] * (max - min + 1) for i in range(2, int(math.sqrt(max)) + 1): now = i * i start = min // now if min % now != 0: start += 1 for j in r..

Code/Python 2023.10.25

[Python] 백준 1747번 소수&팰린드롬

에라토스테네스의 체를 이용한 문제 일차원 배열의 크기를 왜 저렇게 설정하는 건지 모르겠다 .. # 소수 & 팰린드롬 # 어떤 수와 그 수의 숫자 순서를 뒤집은 수가 일치하는 수를 팰린드롬이라 부른다. N보다 크거나 같고, 소수이면서 팰린드롬인 수 중에서, 가장 작은 수를 구하는 프로그램을 작성하시오. # 첫째 줄에 N이 주어진다. # 첫째 줄에 조건을 만족하는 수를 출력한다. def Pal(x): num = str(x) mid = len(num) // 2 for i in range(mid): if num[i] != num[-i - 1]: return False return True import math n = int(input()) a = [0] * 10000001 for i in range(2, len..

Code/Python 2023.10.25

[Python] 백준 1456번 거의 소수

에라토스테네스의 체를 이용한 문제 일차원 배열의 범위를 10^7까지 설정하는 것이 핵심 문제에서 제한 범위가 10^14인데, 제곱근을 찾으면 문제를 해결할 수 있기 때문 # 거의 소수 # 어떤 수가 소수의 N제곱(N ≥ 2) 꼴일 때, 그 수를 거의 소수라고 한다. # 두 정수 A와 B가 주어지면, A보다 크거나 같고, B보다 작거나 같은 거의 소수가 몇 개인지 출력한다. # 첫째 줄에 왼쪽 범위 A와 오른쪽 범위 B가 공백 한 칸을 사이에 두고 주어진다. # 첫째 줄에 총 몇 개가 있는지 출력한다. import math m, n = map(int, input().split()) a = [0] * 10000001 # 시간복잡도를 위해 10^7까지만 수행 (문제 범위 10^14까지인데 제곱근만 찾으면 되기..

Code/Python 2023.10.25

[Python] 백준 1929번 소수구하기

에라토스테네스의 체를 이용한 문제 제곱근까지만 계산해야 시간 복잡도를 만족할 수 있다. # 소수 구하기 # M 이상 N 이하의 소수를 모두 출력하는 프로그램을 작성하시오. # 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. # 한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다. import math m, n = map(int, input().split()) a = [0] * (n + 1) for i in range(2, n + 1): a[i] = i for i in range(2, int(math.sqrt(n)) + 1): # 시간복잡도를 위해 제곱근까지만 수행 if a[i] == 0: continue for j in range(i + i, n + 1, i): a[j] = 0 for i i..

Code/Python 2023.10.24

[정수론] 소수 구하기

Do it! 알고리즘 코딩 테스트 - 파이썬 편 (김종관) 책을 이용하여 알고리즘 공부 중입니다 😃 https://www.youtube.com/watch?v=R1vl8FNAC6Q&list=PLFgS-xIWwNVX-zm4m6suWC9d7Ua9z7fuT&index=24 소수 1과 자기 자신만을 약수로 가지는 수 핵심 이론: 에라토스테네스의 체 구하고자 하는 소수의 범위만큼 1차원 리스트 (2부터 시작) 를 생성한다. 첫 번째 수(2)부터 시작하여 선택된 수의 배수를 지운다. 리스트의 끝까지 2번을 반복하면 리스트에 남아 있는 수는 소수가 된다. 시간 복잡도 이중 for문을 사용하므로 O(n^2)라고 판단할 수 있다. 그러나 2번 과정을 진행하면서 숫자가 계속 지워지기 때문에, 최적화의 정도에 따라 다르겠지만..

Code/Algorithm 2023.10.24

[Python] 백준 1541번 잃어버린 괄호

그리디 알고리즘을 이용한 문제 # 잃어버린 괄호 # 첫째 줄에 양수, +, -로 이루어진 식이 주어진다. 괄호를 적절히 이용하여 최소값을 만드시오. # 첫째 줄에 정답을 출력하시오. def Sum(i): B = list(i.split('+')) total = 0 for k in B: total += int(k) return total ans = 0 cnt = 0 A = list(input().split('-')) for i in A: k = Sum(i) if cnt == 0: # 첫 번째 값인 경우만 더하기 ans += k cnt += 1 else: ans -= k print(ans)

Code/Python 2023.10.23