JAVA 67

[백준] 14425번 문자열 집합

문제 총 N개의 문자열로 이루어진 집합 S가 주어진다. 입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어진다. 입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있으며, 길이는 500을 넘지 않는다. 집합 S에 같은 문자열이 여러 번 주어지는 경우는 없다. 출력 첫째 줄에 M개의 문자열 중에 총 몇 개가 집합 S에 포함되어 있는지 출력한다. 나의 답안 package codingTest; import java.io...

JAVA/JAVA Algorithm 2022.08.18

Socket통신

Socket 이란 ? 소켓(socket) 이란 프로세스간의 통신에 사용되는 양쪽 끝단을 의미한다. 자바에서는 java.net패키지를 통해 소캣 프로그래밍을 지원하는데, 소켓 통신에 사용되는 프로토콜에 따라 다른 종류의 소켓을 구현하여 제공한다. 소켓은 응용프로그램에서 TCP./IP를 이용하는 창구역할을 한다. 두 프로그램이 네트워크를 통해 서로 통신을 수행 할 수 있도록 양쪽에서 생성되는 링크의 단자이다. 두 소켓이 연결되면서 서로 다른 프로그램이 서로에게 데이터를 전달 할 수 있게된다. 자바에서 Socket 통신을 사용하는 이유 먼저 자바에서 소켓 통신은 C 또는 C++ 언어로 구현된 프로젝트와의 통신에 많이 사용된다. 이유는 Java와 C의 데이터 개념이 다르기 때문인데요. C에서는 구조체를 사용하는..

JAVA/JAVA_Lang 2022.08.18

[백준] 11653번 소인수분해

문제 정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오. 입력 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. 출력 N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다. package codingTest; import java.util.Scanner; public class Algorithm4 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); double sqNum = Math.sqrt(num); int k = 2; while (k

JAVA/JAVA Algorithm 2022.08.17

[백준]10872번 팩토리얼 (꼬리 재귀 이용함)

문제 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 정수 N(0 ≤ N ≤ 12)이 주어진다. 출력 첫째 줄에 N!을 출력한다. 알고리즘 분류 수학 , 구현, 조합론 처음 구현한 코드는 다음과 같다. // 백준 10872번 // n! 출력하기 . package codingTest; import java.util.Scanner; public class Algorithm3 { static int factorial(int n) { if (n (2,3) >>(1,6) >> 어? 1 이네 total을 return하자 라고 해서 6 을 리턴한다.

JAVA/JAVA Algorithm 2022.08.17

메모리구조

매소드(Method) 영역 메소드 영역은 자바 프로그램에서 사용되는 클레스에 대한 정보, 클래스 변수(static)가 저장되는 영역 JVM은 자바 프로그램에서 특정 클래스가 사용되면 해당 클래스의 클래스 파일을 읽어들여 해당 클래스에 대한 정보를 메소드영역에 저장한다. 스텍영역 자바프로그램에서 매소드가 호출 될 때 메소드의 스택 프레임이 저장되는 영역이다. 메소드가 호출되면 메소드와 관련된 지역변수, 매개변수를 스택영역에 저장한다. 이렇게 스택영역은 메소드의 호출과 함께 할당되며 메소드의 호출이 완료되면 소멸한다. 힙영역 자바프로그램에서 사용되는 모든 인스턴스 변수가 저장되는 영역이다. new키워드를 사용하여 인스턴스가 생성되면 해당 인스턴스의 정보를 힙영역에 저장한다. 힙 영역은 메모리의 낮은 주소에서..

JAVA/JAVA_Lang 2022.08.15

오버로딩과 오버라이딩

오버로딩 : 서로 다른 시그니처를 갖는 여러 메소드를 하나의 이름으로 정의하는 것 오버라이딩 : 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 같은 시그니쳐를 갖는 메소드로 다시 정의하는 것 자바에서 자식 클래스는 부모 클래스의 private 멤버를 제외한 모든 메소드를 상속받는다. 이렇게 상속받은 메소드는 그대로 사용해도 되고, 필요한 동작을 위해 재정의하여 사용할 수도 있다. 즉, 메소드 오버라이딩이란 상속받은 부모 클래스의 메소드를 재정의하여 사용하는 것을 의미함. 오버라이딩의 조건 1. 오버라이딩이란 메소드의 동작만 재정의 하는것이므로, 메소드의 선언부(이름)은 기존 메소드와 완전히 같아야함. 2. 부모클래스의 메소드 보다 접근 제어자를 더 좁은 범위로 변경할 수 없다. 3.부모클래스의 메..

JAVA/JAVA_Lang 2022.08.14

재귀 호출 (recursive call)

재귀호출은 알고리즘이나 자료 구조론에서 매우 중요한 개념 중 하나이다. 재귀 호출(recursive call)이란 메소드 내부에서 해당 메소드가 또다시 호출되는 것을 의미한다. 즉 자기자신을 끊임 없이 호출하는 끝없이 반복되는 메소드이다. 따라서 메소드 내부에서 재귀 호출울 중단할 수 있도록 조건이 변경될 명령문을 반드시 작성해야 한다. 문제 : 1부터 n까지의 합 구하기 1. 재귀 호출을 사용하지 않은 경우 int sum(int n) { int result = 0; for (int i = 1; i

JAVA/JAVA_Lang 2022.08.14

최대공약수와 최소공배수 구하는 알고리즘 만들기

두수 a,b 와 a를 b로 나눈 나머지를 r이라고 하자. a와 b의 최대공약수는 b와 r의 최대 공약수와 같음을 이용하자. 방법 1. 재귀함수를 사용하는 방법 static int GCD(int a, int b){ // 최대공약수 if (a%b == 0) { return b; } return GCD(b, a % b); } package Algorithm; import java.util.Scanner; public class Gcd { static int a, b; public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("두 수를 입력하시오.!"); a = sc.nextInt(); b = s..

JAVA/JAVA Algorithm 2022.08.14

[백준]1712 손익분기점을 구하는 알고리즘 구현하기

[문제] 월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다. 예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다. 노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총 비용(=고정비용+가변비용)보다 많아지게 된다. 최초로 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다. A, B, C가 주..

JAVA/JAVA Algorithm 2022.08.08