728x90

전체 글 270

백준 2143 <두 배열의 합> Python

https://www.acmicpc.net/problem/2143부분합 문제입니다. 단순히 부분합 리스트를 만들고 부분합 / 부분합 쌍을 찾으면 간단히 생각해도 최악의 경우 1000개의 데이터에서 4중 반복문을 돌아야 하기 때문에 다른 방법을 찾아야 합니다. 우선 각 부분합 리스트에서 2중 반복문을 통해 모든 부 배열 합을 기록해줍니다. 데이터 기록을 할 때 딕셔너리와 리스트 중 선택할 수 있는데, 딕셔너리는 일반적으로 시간을 위해 공간을 포기한 경우로 해당 문제에서 딕셔너리에 모든 부 배열 합을 기록하면 메모리초과가 발생합니다. 그러므로 리스트에 기록하도록 합니다. 기록 중 이분 탐색을 통한 빠른 검색을 위해 정렬을 해주어야 하는데, 이분탐색을 활용한 정렬인 bisect.insort 함수를 사용할 수 ..

백준 3673 <나눌 수 있는 부분 수열> Python

https://www.acmicpc.net/problem/3673우선 리스트를 부분합 리스트로 치환해줍니다. 연산 시 걸리는 시간을 줄이기 위함입니다.그 뒤에 'd 로 나누어 떨어진다' 의 부분을 쉽게 풀어 볼 생각을 해야합니다.조건에서 데이터의 크기는 최대 50000 개인데 해당 데이터를 2중 반복문으로 순회하면 시간 초과가 발생하기 때문입니다. 결론적으로, 어떠한 두 수 A, B의 차가 d 로 나누어 떨어지려면 A 를 d 로 나눈 나머지와 B 를 d 로 나눈 나머지가 같으면 됩니다. A = ad + q, B = bd + p 라고 가정하겠습니다.A - B = d(a-b) + (q - p) 입니다.A - B 가 d 로 나누어 떨어지려면 모든 인수가 d 로 나누어떨어지면 됩니다.d(a-b) 는 이미 d 의..

마비노기 패킷 관찰 - 2

# 해당 글은 단순한 흥미를 위한 실험과 결과로 이루어진 글이며 정책에 위반될 시 수정 혹은 삭제하겠습니다.# 첨부된 파일을 받아 사용할 시 생기는 일에는 책임지지 않습니다.# 물론 바이러스가 심어져 있지는 않습니다.전체 메시지를 읽어올 수 있게 되었다그렇다면 여기서 그치지 않고 프로그램으로 만들어볼 수 있지 않을까?라는 생각으로 오랜만에 PyQt 를 만졌습니다. 용량이 큰 관계로 분할했으니 모두 받아 한 폴더에 넣은 뒤 압축을 해제하면 되겠습니다.아직 0.0.1 버전으로 위에서부터필터링 단어를 포함한 가장 최신 메세지를 띄워주는 기능필터링 단어를 추가 / 선택하는 기능모든 메세지를 띄워주는 기능 필터링된 메세지를 기록하는 기능모든 메세지를 기록하는 기능을 구현했습니다. 기록하는 기능은 파일을 실행한 폴..

마비노기 2024.08.26

마비노기 패킷 관찰

# 해당 글은 단순한 흥미를 위한 실험과 결과로 이루어진 글이며 정책에 위반될 시 수정 혹은 삭제하겠습니다.마비노기는 어떤 방식으로 돌아갈까?라는 생각을 가끔 하곤 합니다. 물론 마비노기 뿐 아닌 다른 게임도 마찬가지지만.그래서 검색을 하던 중 싴갤러스 라는 페이지의 동작 방식을 흥미롭게 보게 되었습니다.https://lute.fantazm.net/ 마비노기 싴갤러스 류트싴갤러스에서 마비노기 플레이에 있어 도움되는 정보와 함께 해보세요lute.fantazm.net아마 패킷 탐지용 캐릭터를 올려두고 패킷을 관찰할 것이라는 추측이 가득했는데, 몹시 흥미로워서 나도 한번 패킷을 관찰해보자 라고 생각하게 되었습니다.우선 파이썬에서 사용할 수 있는  패킷 조작 프로그램인 scapy 를 설치해야 합니다. 물론 패킷..

마비노기 2024.08.21

클래스 Kotlin

클래스, 생성자클래스는 class 키워드로 선언합니다.선언자 다음에 클래스의 이름, 중괄호로 나뉘는 본문이 있습니다. 또 본문에 입력할 내용이 없다면 중괄호를 생략할 수 있습니다. 코틀린에서는 생성자를 본문이 아닌 선언부에 작성할 수 있어서 본문이 없는 클래스도 자주 사용합니다.class Test {}class Test클래스의 멤버는 생성자, 변수, 함수, 클래스로 구성됩니다. 그리고 constructor 라는 키워드로 선언하는 함수가 코틀린에서의 생성자입니다. 그리고 클래스 안에서 다른 클래스를 선언할 수 있습니다.class Person { var name = "JH" constructor(name: String) { this.name = name } fun printName()..

Language/Kotlin 2024.07.14

조건문과 반복문 Kotlin

if~else 문if 문의 조건을 만족하면 if 부분을 실행하고, 그렇지 않으면 else 부분을 실행합니다. 또 else if 를 사용해 여러 조건을 나열할 수도 있습니다.fun main() { var num: Int = 100 if (num > 100) { println("data > 100") } else if (data == 100) { println("data == 100") } else { println("data 다른 언어에서의 일반적인 if~else 문과 다를것 없이 사용할 수 있지만, 코틀린에서는 if~else 문을 표현식으로도 사용할 수 있습니다. 즉, 결괏값을 반환하는 계산식으로도 사용할 수 있습니다. 다만 표현식으로 사용할 때에는 else ..

Language/Kotlin 2024.07.11

변수와 함수 Kotlin

변수의 선언코틀린에서는 변수를 val, var 키워드로 사용합니다.val 은 value 의 줄임말로 초깃값이 선언된 후 바꿀 수 없는 변수를 선언할 떄 사용하고var 은 variable 의 줄임말로 초깃값이 선언된 후 바꿀 수 있는 변수를 선언할 때 사용됩니다.val num1 = 10var num2 = 10fun main() { num1 = 20 // -> 실패 num2 = 20 // -> 성공}타입 지정과 타입 추론변수명 뒤에는 콜론을 추가해 타입을 명시할 수 있으며 값에 따라 타입을 추론할 수 있을때는 생략할 수 있습니다.val num1: Int = 10val num2 = 10초깃값 할당최상위에 선언한 변수나 클래스의 멤버 변수는 선언, 초깃값 설정이 동시에 이루어져야 합니다.하지만 함수 내부에..

Language/Kotlin 2024.07.04

백준 1027 <고층 건물> C++

https://www.acmicpc.net/problem/1027 현재 서있는 건물 꼭대기에서 다른 건물을 볼 수 있는 조건은 내가 서있는 건물과 보고자 하는 건물 사이의 건물들이 시야를 가리지 않는 것입니다. 즉 서있는 건물의 꼭대기와 보고자 하는 건물의 꼭대기를 이은 선분이 다른 건물과 교차하지 않으면 됩니다. 다만 이런 식으로 진행하면 앞선 건물이 다음 건물을 가리는 경우를 고려할 수 없으니 다른 방법을 생각해야 합니다. 왼쪽에 있는 건물의 왼쪽에 있는 건물을 보려면 내가 서있는 건물의 꼭대기에서 가까운 왼쪽에 있는 건물의 꼭대기를 향해 반직선을 그었을 때 반직선의 반시계 방향에 건물의 꼭대기가 있다면 이 건물은 앞선 건물에 가려 보이지 않습니다. 반대로 반직선의 시계 방향에 건물의 꼭대기가 있다면..

백준 1016 <제곱 ㄴㄴ 수> C++

https://www.acmicpc.net/problem/1016제곱수의 배수가 아닌 수를 찾는 문제입니다. 다만 제한이 상당히 빡빡해 시간을 최대한 단축해야 통과할 수 있습니다.특정 범위의 수들을 제곱수로 체를 칠텐데, 우리는 어떠한 범위에서 A 의 배수들을 제거하면 NxA 의 배수들도 모두 없어짐을 알고 있습니다. NxA 의 배수들은 A 의 배수이기도 하기 때문입니다.즉 A^2 으로 체를 친다는 말은 (N*A)^2 은 생각하지 않아도 된다는 말과 같습니다. 어차피 A^2 을 고려하며 모두 제거되었기 때문입니다. 즉 고려해야하는 수 A는 어떤 수의 배수가 아닌 수, 즉 소수임을 알 수 있습니다. 그렇기에 문제를 해결하는 프로세스는 다음과 같습니다. 1. 최댓값 MAX 의 제곱근 이하의 소수를 모두 구한..

길 찾기 알고리즘 <DFS> [Python, C++]

DFS(Depth First Search) / 깊이 우선 탐색DFS 는 후에 설명될 BFS 와 함께 대표적이고 가장 기초적인 길찾기 알고리즘입니다.깊이 우선 탐색이라는 이름에 걸맞게 우선 깊게 파고들어가고 보는 알고리즘이라고 볼 수 있는데, 일반적으로 복잡하지 않은 길 찾기 문제나 어떤 그래프가 몇 개의 그룹으로 존재하는지 찾는데 많이 사용하곤 합니다. 또 스택(Stack) 이라는 자료구조를 사용하는 것이 특징이며 후입선출이라는 스택의 특징을 잘 이용한 알고리즘입니다. 혹은 재귀 함수로 스택을 사용하지 않고 구현할 수 있지만 후입선출이라는 특징은 여전히 사용됩니다. DFS 를 사용하는 상황에서의 단계를 크게 나누자면 아래와 같습니다. 1. 데이터를 입력2. 데이터에서 그래프 혹은 트리를 생성 ( 특정 노..

Algorithm/PathFind 2024.04.30
728x90