java 11

C++ vs Java vs C# 비교 (객체지향언어 비교)

JAVA, C++, C#은 모두 객체지향 언어(Object-Oriented Programming, OOP)이다. 논리와 연산, 제공하는 서비스는 비슷하다. 모든 언어는 각자의 개성과 특징이 있으며, 깊게 보면 탄생 배경에 비롯된 언어마다의 철학이 있다고 생각한다. C++과 JAVA, C# 또한 이러한 점에서 각자 다른 차이가 있다. C++(1983) C++의 초창기는 “C보다 더 좋은 언어”를 목적으로 개발되었다고 사료된다. 사례로는 C++은 C언어로 컴파일링 후 기계어로 다시 컴파일링되는 형식이었다. C는 마이크로 프로세서가 직접 기계어로 번역해주지만, C++은 C언어에서 실행 가능한 파일로 만들어주는 셈이었다. 현재는 객체지향적 언어로 손꼽히고 있지만 C와 유사한 면이 많기에 어떠한 응용프로그램, 임..

기타 2022.11.03

[Java] Java Bean

Java Bean 이란? 특정한 정보 (id, password, name, job...)등을 가지고 있는 클래스를 표현하는 하나의 규칙이고, 데이터를 표현하기 위한 목적을 지니고 있음. 이 규칙(규약)을 지닌 클래스를 Java Bean 이라고 함. Java Bean의 규약 반드시 클래스는 패키지화 되어야 함 멤버변수는 property(프로퍼티)라고 함 멤버변수는 private로 지정하고, 외부접근을 위한 get, set 메소드를 정의해야 함 get, set 메소드는 public으로 지정 JavaBean JavaBean은 데이터를 표현하는 것을 목적으로 하는 자바 클래스로서 아래와 같은 형태. JavaBean 규약에 따르는 클래스를 자바 빈 이라고 부르며, jsp에서 사용되는 자바 빈은 아래와 같은 형태...

Java 2022.11.03

[Java/Spring] 서블릿과 디스패처 서블릿 (Servlet & Dispatcher Servlet)

Servlet 이란? - JAVA를 사용하여 웹을 만들기 위해 필요한 프로그래밍 기술이다. (Servlet 클래스의 구현 규칙을 지켜야합니다.) - 또한, 이러한 웹 기반의 요청에 대해 동적으로 처리해주는 역할로서 Server Side에서 작동(WAS)한다. - 웹 페이지 개발 시, 웹 화면(HTML)은 JSP로 표현하고, 복잡한 프로그래밍은 서블릿으로 구현하여 조화롭게 사용한다. - 클라이언트가 요청을 하면 그 결과를 다시 전송해주는 프로그램이다. - HttpServlet이라는 Java의 클래스를 상속받는다. Servlet Life Cycle 1. Servlet 객체 생성 (1회) 2. init() 호출 (1회) 3. service(), doGet(), doPost() 호출 (요청시 매번) 4. des..

Java 2022.11.03

[Java] String StringBuffer StringBuilder 비교

Java에서 문자열을 다루는 대표적인 클래스로는 String, StringBuffer, StringBuilder 가 있다. 연산이 많지 않을 때는 어떤 것을 사용하더라도 이슈가 발생할 가능성은 거의 없으나, 연산횟수가 많아지거나 멀티쓰레드, Race condition 등의 상황이 자주 발생하는 경우, 각 클래스의 특징을 이해하고 상황에 맞는 적절한 클래스를 사용해야 한다. String vs StringBuffer, StringBuilder String과 StringBuffer, StringBuilder 의 가장 큰 차이점은 String은 불변(immutable)의 속성을 갖는다는 점이다. String str = "hello"; // ① str = str + " world"; // ② ①에서 "hello"..

Java 2022.10.15

문제1

문제 설명 - 각 섬(=노드) 사이를 자전거 타고 활보한다. k 시간에 정차 할 수 있는 섬들은? - 간선의 값은 이동거리를 의미한다. - 섬은 중복해서 이동할 수 있다. - 시작 노드는 0 이다. 입출력 정보 Input - int n(노드의 수): 0~n-1까지 노드가 존재 - int k(도착시간) - int[][] roads(간선 정보) Output - int[] answer(k 시간에 도착할 수 있는 노드들의 집합) Code import java.util.*; class Solution { public int[] solution(int n, int k, int[][] roads) { int[] answer = {}; int[][] graph = new int[n][n]; int[][] visited..

알고리즘 2022.09.28

문제2

문제설명 - int[] numbers가 있다. - 각 요소들은 인접한 요소와 값의 차가 k이하가 되어야 한다. - k 이하가 안되면 swap을 해서라도 k이하가 되게 만들어야 한다. - 최소 swap 횟수를 구한다. - numbers의 길이는 최대 8이다. 입출력 정보 input - int k - int[] numbers output int answer(최소 swap 횟수) Code import java.util.*; class solution { static Set answerSet = new HashSet(); static int sum = 0; public int solution(int[] numbers, int K) { int answer= 0; permutation(numbers, 0, 0, K..

알고리즘 2022.09.28

플로이드 워셜 알고리즘 (Floyd-Warshall Algorithm)

1. 플로이드 워셜 알고리즘 (Floyd-Warshall Algorithm)이란, 그래프에서 가능한 모든 노드 쌍에 대한 최단 거리를 구하는 알고리즘입니다. ​ * 다익스트라 알고리즘은, 하나의 정점에서 다른 모든 정점까지의 최단 거리를 구하는 알고리즘이고, * 플로이드-워셜 알고리즘은, 한 번 실행하여 모든 노드​ 간의 최단 거리를 구하는 알고리즘입니다. ​ * 플로이드 워셜 알고리즘은, 다익스트라 알고리즘과 다르게 음의 간선도 사용할 수 있다. 2. 과정 ​ * 플로이드 워셜 알고리즘은 모든 노드간의 경로를 구하기때문에 2차원 배열이 필요합니다. ​ 초기 행렬 ​ * 노드의 개수만큼 라운드를 반복하여 각각의 해당 하는 노드를 중간 노드로 설정합니다. ​ 예를 들어, 1) 1번 라운드에는, 1번 노드가..

자료구조 2022.09.20

프로그래머스 폰켓몬

문제 설명 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. 홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다. 예를 들어 연구실에 총 4마리의 폰켓몬이 있고, 각 폰켓몬의 종류 번호가 [3번, 1번, 2번, 3번]이라면 이는 3번 폰켓몬 두 마리, 1번 폰켓몬 한 마리, 2번 폰켓몬 한 마리가 있음을 나타냅니다. 이때, 4마리의 폰켓몬 중 2마리를 고르는 방법은 다음과 같이 6가지가 있습니다. 첫 번째(3번), 두 번째(1번) 폰켓몬을 선택 첫 번째(3번), 세 번째(2번) 폰켓몬을 선택 첫..

알고리즘 2022.08.14

프로그래머스 [1차] 추석 트래픽 (오답)

문제 설명 추석 트래픽 이번 추석에도 시스템 장애가 없는 명절을 보내고 싶은 어피치는 서버를 증설해야 할지 고민이다. 장애 대비용 서버 증설 여부를 결정하기 위해 작년 추석 기간인 9월 15일 로그 데이터를 분석한 후 초당 최대 처리량을 계산해보기로 했다. 초당 최대 처리량은 요청의 응답 완료 여부에 관계없이 임의 시간부터 1초(=1,000밀리초)간 처리하는 요청의 최대 개수를 의미한다. 입력 형식 solution 함수에 전달되는 lines 배열은 N(1 ≦ N ≦ 2,000)개의 로그 문자열로 되어 있으며, 각 로그 문자열마다 요청에 대한 응답완료시간 S와 처리시간 T가 공백으로 구분되어 있다. 응답완료시간 S는 작년 추석인 2016년 9월 15일만 포함하여 고정 길이 2016-09-15 hh:mm:s..

알고리즘 2022.08.04

[Java] 정규 표현식 - String.replaceAll() 메서드를 활용한 String 치환

정규식 메타 문자 : . ^ $ * + ? { } [ ] \ | ( ) .x: 임의의문자 + x ex) a.c : abc, a0c ,, ex) a..c : abbc, a00c ,, x* : x의 0번 이상 반복 x+ : x의 1번 이상 반복 ^x : 문자열이 x로 시작 ex) "^[.]" : "."으로 시작 x$ : 문자열이 x로 끝남 ex) "[.]$ : "."으로 끝남 x? : x가 존재할수도, 하지 않을 수도 있음 ex) ab?c : ac, abc 모두 가능 x|y : x 또는 y ex) (x|y)z : xy 또는 yz 모두 가능 x{n} : x의 n번 반복 x{m,n} : x의 m번 이상 n번 이하 반복 x{n,} : x의 n번 이상 반복 ex) "\\.{2,} : "."의 2번 이상 반복 (* ..

Java 2022.07.27