전체 글
[Baekjoon] 1629: 곱셈
[Baekjoon] 1629: 곱셈
2023.03.21문제 a^b % c를 구하는 문제이다. 풀이 내 풀이 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Q1629 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] input = br.readLine().split(" "); long a = Long.parseLong(input[0]); long b = Long.parseLong(input[1]); long c ..
[Java] JVM
[Java] JVM
2023.03.20JVM, JRE, JDK? 자바 프로그램을 개발하기 위해 이런 것들을 설치하는 과정을 거쳤을 것이다. 일단 검색한대로 설치하긴 했는데, 이것들은 전부 무엇이고 어떤 역할을 할까? 한 번 살펴보자. JVM(Java Virtual Machine) JVM(Java Virtual Machine)은 자바 가상 머신으로 자바 프로그램 실행 환경을 만들어주는 소프트웨어이다. JVM은 자바 바이트코드(.class)를 OS에 특화된 코드로 변환(interpreter, JIT compiler)하여 실행시켜준다. 이 때문에 JVM을 사용하면 모든 플랫폼에서 동작하도록 할 수 있다. 즉, 플랫폼에 영향을 받지 않는다는 말이다. 여기서 주의할 점은 Java는 어떠한 JVM에서도 동작시킬 수 있기 때문에 플랫폼에 의존적이지 않지..
[Data Structure] 트라이 트리(Trie Tree)
[Data Structure] 트라이 트리(Trie Tree)
2023.03.19트라이 트리(Trie Tree)? 트라이 트리는 문자열 검색을 빠르게 해주는 트리 형태의 자료구조이다. radix tree, prefix tree, retireval tree 라고도 한다. 여기서 트라이(Trie)는 retireval에서 따온 단어이다. 구현 위 그래프 처럼 car, cb, do, dog라는 단어를 저장한다고 가정한다. 먼저 노드를 하나 만들어 주어야 한다. import java.util.HashMap; import java.util.Map; public class Node { private final Map children; private boolean endOfWord; public Node() { children = new HashMap(); } public Map getChildr..
[Network] TCP/IP
[Network] TCP/IP
2023.03.19TCP/IP? 먼저 TCP/IP에 대해 살펴보기 전 다음을 보자 Internet Protocol Suite 인터넷 프로토콜 스위트(Internet Protocol Suite)는 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 프로토콜의 모음이다. Internet Protocol Suite 중 TCP와 IP가 가장 많이 쓰이기 때문에 TCP/IP Protocol Suite 라고도 불린다. 이전 OSI 7 Layer 포스팅을 봤다면 TCP와 IP가 무엇인지 대략적으로 파악했을 것이다. 그렇다. TCP/IP는 하나의 프로토콜이 아닌 TCP와 IP를 합쳐서 부르는 말이다. 즉, TCP/IP란 IP의 주소 체계를 따라 통신하면서 TCP의 특성을 이용해 송신자와 수신자의 논리적 연결을 생성하여 신뢰성을 유지할..
[Java] "" vs new String("")
[Java] "" vs new String("")
2023.03.19String Java에는 문자열을 쉽게 다룰 수 있는 String Class가 존재한다. 아마 객체 중에서 제일 많이 사용한 것이 무엇일까 생각해보면 거의 당연히 String 일거라 생각한다. 이렇게 많이 사용하는 만큼 사용법도 잘 알고 사용하면 금상첨화가 될 것이다. 먼저, String은 다음과 같은 방식들로 선언할 수 있다. public class Main { public static void main(String[] args) { String s1 = ""; String s2 = new String(""); } } 분명 딱 봐도 선언하는 방식이 다르다. 그런데 둘에게 차이가 없을까? 분명 어떠한 차이라도 있지 않을까? 그럼 이제부터 그 차이를 한 번 살펴보자 "" vs new String("") 위..
[Network] OSI 7 Layer
[Network] OSI 7 Layer
2023.03.19OSI 7 Layer? OSI 7 Layer는 네트워크 프로토콜이 통신하는 구조를 7개의 계층으로 분리하여 각 계층 간 상호 작동하는 방식을 정해놓은 것이다. 이는 ISO(국제표준화기구)에서 개발한 모델이다. 이렇게 계층을 나눈 이유는 통신이 일어나는 과정을 단계별로 한눈에 파악할 수 있기 때문이다. 또한, 7단계 중 특정한 곳에 이상이 생기면 다른 단계의 장비 및 소프트웨어를 건들이지 않고도 이상이 생긴 단계만 고칠 수 있다. 각 계층은 다음과 같다. 계층 이름 단위 예시 프로토콜(Protocol) 7 응용 계층 (Application Layer) Data 텔넷(Telnet), 크롬, 이메일, 데이터베이스 관리 HTTP, SMTP, SSH, FTP, Telnet, DNS 등 6 표현 계층 (Presen..
[Baekjoon] 6064: 카잉 달력
[Baekjoon] 6064: 카잉 달력
2023.03.18문제 1 1 부터 시작하여 각각 m과 n에 대한 모듈로 연산을 진행하여 x y가 될 때 까지 몇번이 걸리는지 구하는 문제이다. 풀이 내 풀이 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Q6064 { private static StringBuilder sb; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); sb = new StringBuilder(); int t = Inte..
[Algorithm] 페르마의 소정리
[Algorithm] 페르마의 소정리
2023.03.18페르마의 소정리? 페르마의 소정리는 피에르 드 페르마가 알아낸 정리로서, 정수론의 가장 기본이 되는 정리이다. 이 내용을 간단히 말하면, 임의의 소수 p와 서로소인 수 a에 대해, a^(p-1)을 p로 나눈 나머지는 무조건 1이라는 말이다. 예를 들어, 3^6 = 729를 7로 나누면 나머지는 1이라는 사실을 알 수 있다. 증명 이항정리를 사용한 증명 먼저 페르마의 소정리는 다음과 동치이며, n = 0일 경우는 자명하다. 이항정리에 의하면 여기서, 0 < n < p이면 은 p의 배수이다. 따라서, 는 항상 성립하는 명제이다. 같은 방법으로 도 항상 성립한다. 따라서 n일 때 성립한다 가정하면, n+1, n-1일 때도 성립한다. 즉, 모든 정수 n에 대해 이 공식이 성립한다는 것을 알 수 있다. 기약잉여계..
[Baekjoon] 17626: Four Squares
[Baekjoon] 17626: Four Squares
2023.03.17문제 특정 숫자의 제곱수 합을 구할 때 그 수들의 최소 개수를 구하는 문제이다. 풀이 내 풀이 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class Q17626 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); int[] dp = new int[n + 1]; dp[..
[Network] 유니캐스트 / 멀티캐스트 / 브로드캐스트
[Network] 유니캐스트 / 멀티캐스트 / 브로드캐스트
2023.03.17유니캐스트(Unicast) 가장 많이 사용하는 통신 방법으로 목적지 주소 하나만 적어서 그 PC 하나에게만 보내는 방식이다. 즉, 1:1 통신이다. 어떤 한 PC가 정보를 전송하기 위한 프레임에 자신의 맥 주소와 목적지의 맥 주소를 첨부하여 전송한다. 같은 네트워크에 있는 모든 시스템들은 그 맥 주소를 받아서 자신의 랜카드의 맥 주소와 비교하여 같다면 프레임을 받아서 처리하고, 같지 않다면 버린다. CPU에 전달하지 않고 바로 버리기 때문에 CPU에 영향을 주지 않아 성능 저하가 발생하지 않는다. 브로드캐스트(Broadcast) 브로드캐스트 도메인안에 있는 모든 PC들에게 한 번에 전송하는 방식으로, 1:N 통신이다. 브로드캐스트는 주소가 미리 정해져있으며, 유니캐스트와 다르게 브로드캐스트는 맥 주소가 ..
[OOP] 무분별한 Getter/Setter를 지양하라
[OOP] 무분별한 Getter/Setter를 지양하라
2023.03.16무분별한 Getter/Setter를 지양하라? 우리는 보통 개발을 할 때 getter와 setter 메서드를 생성하여 자주 사용하곤한다. 그리고 매우 편리하다. 하지만 이렇게 모든 멤버변수에 대해 getter/setter를 생성하여 사용하는 것이 좋을까? 객체지향 설계 시에 이를 지양하는 것이 좋다고 한다. 왜 그럴까? Setter를 지양하라? 개발은 혼자가 아니다 setter를 무분별하게 사용하면 다른 개발자가 해당 코드를 봤을 때 값을 변경한 의도를 파악하기 힘들어진다. public static void main(String[] args) { Lotto lotto = new Lotto(List.of(1, 4, 12, 32, 40, 41)); lotto.setNumbers(List.of(13, 14, ..
[Network] 맥 주소(Mac Address)
[Network] 맥 주소(Mac Address)
2023.03.15맥 주소(Mac Address)?맥 주소는 컴퓨터 간 데이터를 전송하기 위해 있는 물리적 주소이다. 간단히 말해 인터넷을 할 수 있는 이더넷 기반 기기에는 모두 다 하나씩 할당되어 있는 고유한 id이다. 보통 우리가 아는 컴퓨터의 주소는 ip 주소이다 그런데 맥 주소는 또 무엇일까?컴퓨터는 통신할 때 ip 주소 뿐만아니라 맥 주소도 필요하다. 우리가 흔히 아는 ip 주소는 시작점과 끝점에 해당하는 주소를 뜻한다면, 맥 주소는 물리적으로 연결되어 있는 노드와 통신할 때 사용된다. 즉, ip 주소 간의 통신은 각 라우터 홉(hop)에서 일어나는 맥 주소와 맥 주소 통신의 연속적인 과정이다.여기서 홉은 출발지와 목적지 사이에 위치한 경로의 한 부분을 말한다. 간단하게 보면 패킷이 한 라우터에서 다른 라우터로 ..