본문 바로가기

분류 전체보기68

[Java]백준 11053번 :: 가장 긴 증가하는 부분 수열 백준 온라인 저지 11053번 - 가장 긴 증가하는 부분 수열 Java 알고리즘 문제풀이 풀이 DP(다이나믹 프로그래밍) 문제입니다. 큰 문제를 작은 단위의 문제로 생각해서 푸는 알고리즘인데, 코딩테스트에 자주 출제되는 문항입니다. 문제를 해석해보면 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구한는 문제 수열 A = {10, 20, 10, 30, 20, 50}일때 가장 긴 증가하는 수열 {10, 20, 10, 30, 20, 50} DP(다이나믹 프로그래밍)에서 중요한 것은 규칙을 찾거나, 어떤 일반식을 찾는 것이 키 포인트입니다. 먼저 A수열의 A[1], A[2]를 먼저 보면, A[1] < A[2]이므로 D[2] = D[1] + 1을 넣습니다. 이때 A[3]의 값은 A[2]보다 작고 A[1].. 2020. 4. 4.
[이더리움 dApp] 로또 스마트 컨트랙트 Tutorial 1. 개요 블록체인은 기존 중앙 시스템과 달리 분산 원장을 가진다는 장점을 가지고있다. 이 장점을 이용하면 데이터가 여러사람에 의해 무결성을 검증받을 수 있다는 점이다. 블록체인 기술로 만들어진 이더리움은 블록체인이 가진 장점에 더해 스마트 컨트랙트를 작성할 수 있게 되었다. 이번 튜토리얼은 로또 스마트컨트랙트를 만들어 보는 내용이다. 위 그림은 로또 dApp의 전체적인 구성도이다. 참여자들은 스마트 컨트랙트를 이용해 일정 금액을 모금하고 모금이 완료되면 컨트랙트 생성을 했던 사람은 당첨자 추첨을 진행합니다. 2. 로또 컨트랙트 작성 pragma solidity ^0.5.10; contract Lottery { } 기본적인 컨트랙트를 작성합니다. 필요한 변수는 2가지가 필요합니다. 스마트 컨트랙트 생성자.. 2019. 8. 10.
[이더리움 dApp] 이더리움으로 간단한 상품관리 dApp 만들기 -- 수정 19.11.18 -- Github 소스코드 약간의 오류를 수정하였습니다. 이더리움의 꽃은 바로 스마트컨트랙트를 이용한 dApp입니다. 비트코인과 다르게 이더리움의 스마트 컨트랙트는 강력한 차별점으로 뽑을 수 있고, 블록체인 기술이 단순한 화폐기능을 넘어서 프로그래밍을 할 수 있게 하여 다양한 활용 어플리케이션들을 만들어 낼 수 있다. 이번에는 이더리움 dApp을 처음만들어 보는 사람 기준으로 설명을 해보았다. Requirement Visual code Geth 약간의 javaScript 지식 git 1. 초기 설정 먼저 Geth를 동작시켜 이더리움 private Network를 구성한다. Geth private Network 구성은 이 게시물을 참고하면된다. https://developer-m.. 2019. 5. 9.
모듈러 연산 (Modular arithmetic) 암호 알고리즘은 모듈러 연산을 가장 빈번하게 사용하는데, mod m일때, 항상 0 ~ m의 범위를 가지는 값을 결과 값으로 가지게 된다. 만약 음수의 결과 값을 가진다면 절대 값을 취한 값에서 mod를 한 결과를 m을 더하거나 m을 2배, 3배한 값을 더해 0 ~ m의 범위의 결과 값을 가지도록 하면 된다. 모듈러 연산의 예시 17 mod 5 = 2 20 mod 3 = 2 음수일 때 -3 mod 11 = 8 -11 mod 11 = 0 -1 mod 11 =10 모듈러 합동(Modular congruent) 두 a, b의 숫자가 n을 modular한 결과 값이 같다면 모듈러 합동관계(congruent modulo n)이라고 한다. $$ a\ mod\ n\ =\ b\ mod\ n\ $$ $$ a\ ≡\ b\ .. 2019. 4. 13.
기초 암호학(4) - ECC(타원곡선 암호화 알고리즘) 블록체인을 공부하다 보면 자주 접하는 암호화 알고리즘입니다. 암호화 알고리즘RSA 암호방식에 대한 대안으로 1985년에 제안되었습니다. 암호키 길이가 길어지면 보안 강도는 높아지지만 속도가 느려집니다. 하지만, ECC(Elliptic Curve Cryptography)를 사용하면 짧은 키로도 동일한 암호 성능을 가지는데, 이는 컴퓨터 성능이 낮아도 암호 성능을 유지할 수 있게되었습니다. 따라서, 이러한 이유로 RSA를 대체할 차세대 공개키 암호기술로 부상하고 있다. 타원 곡선 암호화(Elliptic Curve) 알고리즘으로 불리며, 이전 포스팅에서 소개했던 공개키 암호화 방식입니다. 타원 곡선의 정의 아래 방정식을 만족하는 x, y의 집합을 곡선 그래프로 나타낸 것을 뜻합니다. $$ y^{2}\ =\ x.. 2019. 4. 13.
[비트코인]SegWit vs SegWit2x - 세그윗과 세그윗2x SegWit (Segregated Witness) - 분리된 증인 BlockStream의 Peter Wiulle가 구상한 SegWit은 하나의 Side Chain 개념이다. 분리된 증인(Segregated Witness)는 각각의 트랜잭션, 전체 트랜잭션의 서명 정보와 같다. 기존의 서명정보는 Merkle Tree에 같이 존재해왔지만, SegWit을 통해 Side Chain으로 분리해 Main Chain과 병렬적으로 동작한다. BIP 141 (Bitcoin Improvement Proposal)에서 제한된 기존 트랜잭션의 포멧을 바꾸는 Soft Fork이다. BIP는 Bitcoin 개선안을 제안한 것들을 의미한다. BIP 뒤에 존재하는 숫자는 몇 번째로 제안된 개선안인지를 의미하는데 BIP 414에서는 .. 2019. 4. 4.