전체 글 183

자바 상속 기초 4) 메소드 overloading - 공부하는 도비

클래스의 메소드를 선언할 때, 같은 메소드지만 다른 매개 변수를 가지게 하는 것을 메소드 overloading이라고 합니다. 바로 예제 코드를 보겠습니다. package Inferitance; class Print { int a, b; int c = 0; public void Setnumber(int a, int b) { this.a = a; this.b = b; } public void Setnumber(int a, int b, int c) { this.Setnumber(a, b); this.c = c; } public void Sum() { System.out.println(a + b + c); } public void Mul() { if (c == 0) { System.out.println(a * ..

JAVA 2022.04.02

자바 상속 기초 3) 메소드 overriding - 공부하는 도비

자바의 상속을 통해서 상위 클래스의 기능을 하위 클래스로 물려줄 수 있었습니다. 하지만, 상속을 하게 되면 하위 클래스는 상위 클래스의 메소드 변경 없이 단순 기능 추가만 할 수 있습니다. 만약 그래야 한다면 제약이 상당할 것입니다. 이런 제약을 벗어나기 위해서 하위 클래스가 부모 클래스의 기본적인 동작을 변경할 수 있어야 하는데 이런 맥락에서 도입된 기능이 메소드 오버 라이딩(overriding)입니다. 메소드 오버 라이딩은 재정의, 새롭게 정의한다는 뜻을 가지고 있습니다. 즉, 부모 클래스에 선언한 메소드를 자식 클래스에서 동일한 메소드명으로 재 정의 해주면, main에서 이 메소드를 호출했을 때, 부모 클래스가 아닌 자식 클래스에 있는 메소드를 호출하게 끔하는 것입니다. package Inferit..

JAVA 2022.04.02

자바 상속 기초 2) super - 공부하는 도비

지난 피드에서 상속이 무엇인지, 왜 필요한지에 대해 설명했습니다. 2022.04.02 - [자바] - [자바] 상속 기초 1) - 공부하는 도비 [자바] 상속 기초 1) - 공부하는 도비 오늘은 상속 기본 개념을 알아보겠습니다. 우리가 어떤 프로그램 소스 파일을 가졌고, 그 소스 코드의 기본 동작에다가 추가하고 싶은 기능이 있다고 가정해볼게요. 가장 쉬운 방법은 소스 코드 yang-wistory1009.tistory.com 자바는 생성자라는 초기화 작업을 가능케 하는 특수한 메소드가 있는데, 상속을 하다 보니 부모 생성자와 자식 생성자 부분에서 문제가 생긴다는 걸 발견했습니다. 우선, 무슨 문제가 발생하는 지 코드를 통해서 알아보겠습니다. 위의 코드를 실행 시키면, 아래와 같은 오류가 발생합니다. 부모 ..

JAVA 2022.04.02

자바 상속 기초 1) - 공부하는 도비

오늘은 상속 기본 개념을 알아보겠습니다. 우리가 어떤 프로그램 소스 파일을 가졌고, 그 소스 코드의 기본 동작에다가 추가하고 싶은 기능이 있다고 가정해볼게요. 가장 쉬운 방법은 소스 코드 자체를 수정하는 방법입니다. 하지만, 코드의 수정이 불가능한 경우가 있고. 만약 추가적인 기능을 넣어서 코드를 새로 짜더라도, 다른 사람은 그 기능이 필요 없다고 생각되어 빼버릴 수 도 있습니다. 이때 추가했던 기능의 매개변수라던지 클래스 등이 여전히 남아 있어 오류를 발생시킬 가능성이 커지게 됩니다. 이런 코드의 오류를 줄이기 위해서 나온 개념이 "상속"입니다. 기존의 객체를 그대로 유지하면서 어떤 기능을 추가하는 방법을 구상하다가 나온 개념이 상속입니다. 즉, 기존의 객체를 수정하지 않으면서 새로운 객체가 기존의 객..

JAVA 2022.04.02

uuid를 활용한 해시 함수의 seed 사용 - 공부하는 도비

uuid 모듈이란? 네트워크 상에서 중복되지 않는 고유한 식별자인 UUID(Universally Unique Identifier)를 생성하기 위해 사용되는 모듈입니다. UUID는 기본적으로 16바이트(128비트)의 숫자이고, 이 숫자는 32개의 16진수로 구성되며, 5개의 그룹으로 표시되고 각 그룹은 하이픈(-)으로 구분됩니다. 파이썬에선, 별 다른 설치 없이 uuid 모듈을 import 한 뒤 uuid.uuid4()를 출력하면, UUID를 얻을 수 있습니다. 이렇게 생성한 UUID를 해시 함수의 seed 로서 사용해보겠습니다. (여기선, seed를 단순히 해시 함수의 입력 값으로 봐도 무관합니다.!) import uuid import hashlib def HashFunction(text): hex_ha..

Python 2022.03.05

hashlib을 이용한 binary hash value 생성 - 공부하는 도비

HASH 함수란? 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수입니다. 함수의 입력 값의 길이가 어떠하든, 결과 값의 길이는 항상 동일하다는 것이 해시함수의 특징입니다. 또한, 동일한 데이터를 입력 값으로 사용할 경우, 결과는 시간이 지나도 같게 나오게 됩니다. 해시 함수의 종류에는, MD5, SHA(SHA-1, SHA-256, SHA-512, SHA-3) 등이 있습니다. 아래 링크는 SHA256을 통해서 해시값을 만들어 볼 수 있는 사이트입니다. https://www.convertstring.com/ko/Hash/SHA256 SHA256 해시 - 온라인 SHA256 해시 생성기 www.convertstring.com 보통 해시 값이라는 건 16진수로 결과가 나오게 되는데, 오늘 제가 알아..

Python 2022.03.05

자바 생성자(constructor)와 초기화 - 공부하는 도비

객체 지향 프로그래밍도 초기화에 해당하는 기능이 제공되는 데 이것을 "생성자(constructor)"라고 합니다. 생성자를 쓰고, 쓰지 않고를 코드로 비교해보겠습니다. 형광색으로 표시된 곳이 두 코드의 차이점을 나타냅니다. 생성자를 사용하지 않을 때는, 직접 setNumbers라는 메소드에 매개변수로 값을 전달해야 했지만, 생성자를 사용했을 때는 Calculator class 의 객체 c1(c2)를 생성하면서 값을 초기화해주는 걸 볼 수 있습니다. 조금 더 자세히 살펴보면, Calculator_1 과 동일한 이름을 가진 메소드 명을 지정하면 그게 생성자가 됩니다. 생성자 메소드는 어떤 메소드 보다 제일 먼저 실행되기 때문에, 초기화 작업이 가능하게 되는 것입니다.

JAVA 2022.03.04

자바 객체 지향 기본 동작 원리 (클래스, 인스턴스, 객체) - 공부하는 도비

자바는 객체지향 언어로 알려져 있습니다. 객체지향 기능을 사용하지 않고도 프로그램을 작성할 수 있지만, 가독성 좋고 실용적인 코드는 작성할 수 없습니다. 오늘 피드에서는 왜 객체지향이라는 게 필요한지와 그와 관련된 용어 정리를 해보겠습니다. 이전 피드에서는 메소드의 중요성과 필요성에 대해서 설명했습니다. 메소드에 대해 궁금하신 분들은 아래 링크를 따라가 주세요~! 2022.03.03 - [자바] - [자바] 메소드(method) - 공부하는 도비 [자바] 메소드(method) - 공부하는 도비 프로그램을 작성하다 보면 특정 연산을 중복해서 여러 번 사용할 때도 있습니다. 예를 들어, '+, -, *, /' 연산을 해주는 코드가 3번 필요하다면, 아래 코드처럼 비 효율적인 방법으로 실행해야 합 yang-w..

JAVA 2022.03.04

자바 Scanner 사용 - 공부하는 도비

자바는 프로그램 실행 중에 사용자가 데이터를 직접 입력하여, 프로그램에 사용할 수 있도록 하는 Scanner class가 있습니다. 영어 뜻 그대로 프로그램에 값이 입력이 되면, 그 값을 스캔하는 기능을 가지고 있습니다. * 사용법 1. Scanner 호출 import java.util.Scanner; Scanner를 사용하기 위해서 java.util 패키지 안에 있는 Scanner를 호출합니다. 2. Scanner 객체 생성 Scanner sc = new Scanner(System.in); 위의 코드를 해석하면, - System.in은 사용자가 입력한 값이고, - Scanner는 System.in에서 입력된 값을 스캔하고, - sc라는 객체를 생성하여, 스캔한 값을 sc 객체에 넣는다라는 뜻입니다. 3..

JAVA 2022.03.03

자바 메소드(method) - 공부하는 도비

프로그램을 작성하다 보면 특정 연산을 중복해서 여러 번 사용할 때도 있습니다. 예를 들어, '+, -, *, /' 연산을 해주는 코드가 3번 필요하다면, 아래 코드처럼 비 효율적인 방법으로 실행해야 합니다. 위의 코드를 보면, (a, b), (c, d), (e, f) 각각의 변수가 모두 동일한 연산을 하고 있다는 걸 알 수 있습니다. 이 처럼 반복되는 코드를 줄이고자 메소드라는 개념이 나오게 되었습니다. * 메소드란, 간단히 코드 재사용과 유지 보수를 쉽게 하기 위한 도구입니다. : 메소드를 정의할 땐, 매개변수(인자)의 유무, 반환 값의 유무 에 따라서 크게 4가지로 표현이 됩니다. 1) 매개변수(인자) X, 반환 값 X : 기본 형태인 메소드를 정의해보았습니다. 반환 값이 없을 때는 void라는 단어..

JAVA 2022.03.03

자바 for(for-each)반복문 사용 - 공부하는 도비

자바의 반복문엔 for, while이 있습니다. 오늘은 for를 중점적으로 살펴보겠습니다. for문에는 for와 for-each 라는 게 있습니다. 1. for : for(변수 선언&초기화 ; 반복 조건 ; 변수 변화 연산) 으로 구성이 됩니다. - for 문으로 배열 생성 후, 출력하기 : 길이가 5인 int 배열을 선언한 뒤, 배열의 길이 만큼 for문을 돌려서 각 배열에 순차적으로 값을 넣고, 출력하고 있는 예제입니다. 2. for-each : for-each는 기본 for문을 조금 더 편리함을 줄 수 없을까? 하는 생각으로 나오게 된 유형입니다. 예제를 배열로 들어보겠습니다. 9번째 줄을 보면, for (String (임의의)변수명 : 배열 명)을 확인하실 수 있습니다. e는 배열 명에 해당하는 ..

JAVA 2022.03.03

enumerate 내장 함수로 for문 돌리 - 공부하는 도비

많은 프로그램 언어가 특정 변수(ex. i, j, k)를 증가시켜가면서 반복문을 수행합니다. 하지만, 파이썬에서는 enumerate()라는 내장 함수로 이러한 변수 없이 독특한 방식으로 반복문을 돌릴 수 있습니다. for __ in __: 가장 기본적인 for문은 for in : 형태로 작성이 됩니다. 예를 들어, 3개의 숫자를 담고 있는 리스트를 for 문으로 출력해보는 코드를 작성해보겠습니다. 해당 리스트의 인덱스도 함께 출력하고 싶을 땐 어떻게 해야할까요?. 제일 간단한 방법은 새로운 변수를 하나 두고 변수의 값을 증가시키며 출력하는 것입니다. 아마 C언어나 다른 언어를 하다가 파이썬을 하시면, 제일 먼저 떠올리는 방법 중 하나일 것 같습니다. 하지만, 프로그램이 종료되어도 변수(index)라는 값..

Python/Python Basic 2021.12.06

for 문을 사용하여 list 값 remove 할 때 주의 할 점 - 공부하는 도비

리스트에 있는 값을 for문으로 하나하나 삭제해보려고 했지만, 계속 리스트 범위를 벗어났다는 등의 오류가 났습니다. 다음 코드를 보며, 어떤 오류가 있는지 살펴보겠습니다. test = list(range(0, 10)) # test = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print("original test : ", test) for i in test: test.remove(i) print(test) 해당 코드를 실행시키면, 위와 같은 결과가 나옵니다. 문제의 원인은, 첫 번째 루프 때는 test의 0번째 원소를 지우므로 리스트는 [1, 2, 3, 4, 5, 6, 7, 8, 9]가 됩니다. 두 번째 for문을 돌 때는, test의 1번째 원소(test = [1, 2, 3, 4, 5, 6..

Python/Python Basic 2021.11.08

소수, 소수 판정 - 공부하는 도비

암호학에서 소수는 상당히 많이 사용된다. 앞으로 소수와 관련된 내용을 정리하며, 암호에 대한 중요한 개념을 다뤄보려고 한다. * 소수 : 하나의 양정수가 오직 1이나 자신으로만 나누어 떨어진다는 말과 동일하다. → 소수와 관련된 몇가지 사실 1) 가장 작은 소수는 2이다. - Proof) 2는 1과 2로만 나누어 떨어지기 때문이다. 2) 1은 소수가 아니다. - Proof) 소수는 서로 다른 두 개의 정수로만 나누어 떨어져야 하고, 그 이상이나 그 이하의 정수로 나누어져서는 안된다. 1은 오직 자신에 의해서만 나누어지기 때문에 1은 소수가 아니다. 3) 소수는 무한하다. - 소수가 무한하다는 증명은 몇 가지가 있는데, 가장 유명한 유클리드의 증명을 살펴보기로 한다. 우선, 소수가 유한하다고 가정한다. *..

Computer Security 2021.11.02

백준 1934번 문제 풀이 - 공부 하는 도비

https://www.acmicpc.net/problem/1934 1934번: 최소공배수 두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있 www.acmicpc.net 최소 공배수를 구하는 문제입니다. 제가 예전에 유클리드 호제법에 관한 내용을 포스팅한 적이 있습니다. gcd(greatest common divisor) 즉, 최대 공약수를 구하는 방법은 아래 링크를 확인해주세요. 2021.05.21 - [파이썬/프로젝트] - [파이썬] 유클리드 알고리즘(Euclidean Algorithm) - 공부하는 도비 [파이썬] 유클리드 알고리즘(Euc..

Python/Baekjoon 2021.11.01

백준 11653번 문제 풀이 - 공부하는 도비

https://www.acmicpc.net/problem/11653 11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net 이 문제는 입력 받은 수를 소인수분해 하는 문제이고, 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력해야 한다. 소인수분해를 못하는 사람은 없을 꺼라고 생각하고, 코드를 바로 보면 우선, 큰 while문 안에 또 다른 while문을 넣었다. 첫번째 while 조건은 입력 받은 수가 1이 될 때까지 반복문을 돌리는 것이고, 두번째 while 조건은 나누는 수(d)가 입력받은 수(a)를 나누었을 때, 나머지가 0이 되도록 d를 1씩 증가시키면서, a를 나누었을 때 나머지가 0이 될 때 까지 반복문을 돌리는 것이다. ..

Python/Baekjoon 2021.10.24

백준 5355번 문제 풀이 - 공부하는 도비

https://www.acmicpc.net/problem/5355 5355번: 화성 수학 겨울 방학에 달에 다녀온 상근이는 여름 방학 때는 화성에 갔다 올 예정이다. (3996번) 화성에서는 지구와는 조금 다른 연산자 @, %, #을 사용한다. @는 3을 곱하고, %는 5를 더하며, #는 7을 빼는 연산 www.acmicpc.net 해당 문제는 특정 문자가 들어오면, 그에 맞춰 정해진 연산을 해주는 문제입니다. - @ => 3 곱하기 - % => 5 더하기 - # => 7 빼기 예제 입력 처럼, 몇개의 문자가 들어올지 모르기 때문에 미리 변수를 선언해서 값을 입력 받는 형태는 사용할 수 없을 꺼라고 생각했다. ( ex) a, b, c = map(int, sys.stdin.readline().split()..

Python/Baekjoon 2021.10.24

백준 1032번 문제 풀이 - 공부하는 도비

https://www.acmicpc.net/problem/1032 1032번: 명령 프롬프트 첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은 www.acmicpc.net 처음 이 문제를 봤을 때, 입력받은 정수 만큼 문자열을 저장한 후, 각 자리마다 모두 비교할 생각이었다. 하지만, 제일 처음 입력 받은 문자열과 그 다음 입력 받은 문자열을 비교 한 후, 예제 출력 처럼 미리 바꿔두면, 한번에 모든 문자열을 각 자리마다 비교하는 수고가 사라진다. 코드는 간단하다. 1. a 에 입력한 문자열을 리스트 형으로 바꾸어 저장한다. 2. 입력받은 정수(count)-1..

Python/Baekjoon 2021.10.22

백준 2839번 문제 풀이 - 공부하는 도비

문제를 크게 두 가지로 나눠야해요. 첫 번째는 3과 5의 적당한 곱으로 입력된 값을 만들어 내지 못할 때, -1 을 출력해야하고, 아닌 경우는 총 몇개의 봉지가 필요한지 계산해야 합니다. 이 문제를 푸는 방법은 1. 우선 5로 나눠떨어지면 그 몫을 출력해주면 되고, 2. 아닌 경우는 입력 된 값에 -3을 해주면서 봉지 +1 을 해주면 됩니다.(여기서 +1을 해주는 건, 3kg 봉지가 추가 된다는 뜻입니다.) 3. 위의 과정을 입력된 값이 0 이 될 때까지 진행해줍니다. 만약 입력된 값이 0이 되면, 반복문을 멈춰주면 되겠죠? 코드를 보면 쉽게 이해하실 수 있습니다.!

Python/Baekjoon 2021.08.20