자바 9

[프로그래머스] 시저 암호 풀이 - JAVA

📍LEVEL1 : 시저 암호 유형 : 구현 📍풀이방법 입력값이 String 이고, 한 자리마다 n씩 움직여서 최종 결과값을 내야한다. 1) String의 한 자리씩 확인을 해야한다. -> char를 사용해야겠다고 생각. 2) 대소문자를 함께 입력받는다. -> 대소문자 구분을 해줘야겠다고 생각. 3) char는 int형으로 변경할 수 있고, 계산을 할 수 있기 때문에, 입력받은 n 과 각 자리 char 값을 더해준다. 4) z 또는 Z 를 넘어가는 범위는 있일 수 없기 때문에 a~z의 개수(=26)를 빼준다. (z or Z 범위를 벗어나게 된다면) 5) 영어 알파벳을 제외한 다른 문자(공백)도 들어갈 수 있기 때문에 예외로 처리해준다. 📍코드 class Solution { public String so..

[JAVA] 1주차 - JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가

👻 자바가 만들어지게 된 배경 자바는 기본적으로 C/C++과 비슷하지만 C/C++을 사용하면서 나타나는 복잡하고 안전하지 않은 문제를 해결하고자 했다. 초기에 자바가 지향한 바로는 multiple host architecture 와 secure으로 한 번 쓰고 어느 곳에서도 실행할 수 있는 것을 목표로 했다. (Write Once Run Anywhere) 자바로 개발된 프로그램은 CPU나 운영 체제의 종류에 관계없이 JVM을 설치할 수 있는 시스템에서 어디서나 실행할 수 있으며 웹 애플리케이션의 특성과 맞아떨어져 폭발적인 인기를 끌게 되었다. 🙄 JVM이란 무엇인가? 정의 : 자바 가상 기계(JVM : Java Virtual Machine)로서 자바 바이트코드를 실행할 수 있는 주체 설계자 : 제임스 고..

LANGUAGE/JAVA 2021.10.10

[WebRTC] Kurento를 사용하여 실시간 스트리밍하기

Kurento client를 활용하여 one2many call의 흐름을 익혀보자 대략적인 그림으로 그려보면, 1명의 스트리머가 있고 N명의 Viewer들이 존재하는 아래와 같은 그림일 것이다. 대략적인 서버의 구성은 아래의 그림과 같다. 이제 본격적으로 어떤 흐름으로 1:N 스트리밍을 할 수 있는지 알아보자 Presenter가 방송 켰을 때 1. Client가 웹에 들어오면 웹소켓으로 시그널링 서버와 연결을 한다. 2. 스트리머가 스트리밍 시작 버튼을 누르면, JSON형태로 id와 sdpOffer정보를 시그널링서버에 보낸다. 스트리머가 다른 방송을 보고 있는지 또는 다른 방송을 키고 있는지 여부를 파악해야 함 id는 WebSocket통신을 할 때, 어떤 메세지를 담고 있는지 구별해주는 id 이다. Pre..

WebRTC 2021.01.25

[백준] 1715번 카드정렬하기 자바 코드 & 문제풀이 방법

[ 백준 ] 1715번 카드정렬하기 자바 코드 & 문제풀이 방법 문제설명 생각해야 할 요소 1. 처음엔 문제가 이해가 잘 안갔다. 문제에서 정렬된 두 묶음의 숫자카드가 있다고 나와있는데, 이 말이 입력값이 정렬이 된 상태로 들어온다는 건가? 헷갈렸다. 2. 문제를 읽다가 생각해낸 풀이는, 최소한의 비교 횟수가 나오려면 숫자가 작은 것들끼리 더해야 한다는 한다는 것이었다. 간단하게 생각해서 처음 나온 숫자랑 두번째 나온 숫자는 N-1 번 나올거고, 그 다음은 N-2, N-3 나오는거 아닌가? 해서 풀었다. 결과는 틀렸습니다! 그 이유는, 다른 예시를 보면 이해가 확실히 갈 것이다. 백준에서 주어진 예시에는 (10 + 20 ) < 40 이라 한번에 캐치하기 어려웠을 수도 있다. 이 문제의 패턴은 더해진 숫자..

알고리즘/백준 2020.11.10

[프로그래머스] 무지의 먹방 라이브 - JAVA

[프로그래머스] 무지의 먹방 라이브 - JAVA 문제설명 문제풀이 방법 일단, Collection.sort를 사용해서 먹는 시간이 가장 빠른 순으로 정렬 while문을 통해 빠른시간 순서대로 값을 빼내서 그 크기만큼 곱해준다. 코드 : ( foods.get(0).time - cnt ) * n while문의 조건식을 보면, 남은 k번을 돌아가는 데 있어, foods의 size가 더이상 줄어들지 않는 크기를 찾아낼 수 있다. 그렇게 하면 더이상의 작업을 할 필요없이 index를 구해주면된다. Food 클래스의 num(index) 순서대로 정렬하고, ( k % n ) 를 통해 num의 값을 찾아주면 된다. 내가 계속 틀렸던 이유 ArrayList를 사용했다. 사실, ArrayList를 사용한다고 문제가 발생하..

[백준] 2428번 표절

[백준] 2428번 표절 문제설명 문제만 보면, 상당히 간단한 문제여서 금방 풀 수 있을 것 같았는데,, 늪에 빠져서 한참을 헤맸다ㅠㅅㅠ 문제풀이 방법 1. 두 파일을 비교하면서 i≠j이고, size(Fi) ≤ size(Fj)이면서, size(Fi) ≥ 0.9 × size(Fj) 이 조건을 만족시키는 쌍일 경우만 검사를 하면 된다. 2. 하나씩 비교해가면서 탐색해도 되지만, n의 최대 크기가 100,000 이기 때문에, n^2 탐색을 하게 되면 시간초과가 날것이다. 3. 그렇기 때문에 오름차순 정렬 후, 이분탐색을 사용해서 조건을 만족시키는 최대 값을 찾으면 된다. Example) 예를들어, 조건을 만족시키는 최대값의 index가 3이라고 가정해보자. 그렇다면, 비교해야할 index 0 을 제외하고 in..

알고리즘/백준 2020.11.02

[백준] 1068번 트리

[백준] 1068번 트리 문제 설명 입출력 문제풀이 방법 트리가 주어지고, 삭제할 노드에 연결되어 있는 노드를 모두 제거한 후 리프노드의 개수를 출력하면 된다. 1. 주어진 노드가 어떤 루트 노드와 연결되어 있는지 정보를 저장할 arr 배열 하나를 선언한다. 2. 삭제할 노드 R 을 입력받은 후 delete(R) 을 통해 R에 연결되어 있는 노드를 모두 삭제한다. - 삭제가 된 노드인지를 판별하기 위해 boolean값의 node 배열을 사용했다. - 삭제가 된 노드면 node[i]의 값을 true로 바꾸게 된다. - 삭제를 하는 방법은 BFS방법을 통해 연결된 것을 모두 지우도록 했다. 3. 삭제가 끝나면 리프노드를 찾아야 한다. - 삭제되어진 노드는 제외하고 ( 즉, node가 true인 것은 제외 )..

알고리즘/백준 2020.10.27

[프로그래머스] 쿼드압축 후 개수 세기 - JAVA

[프로그래머스] 쿼드압축 후 개수 세기 - JAVA 문제 설명 풀이과정 1. 구역을 정해서 그 구역이 0으로 채워있으면 0으로 압축, 1으로 채워져있으면 1로 압축하는 과정 1-1. 만약, 모두 똑같은 숫자로 되어 있다면 zeroCnt or oneCnt를 증가시킨다. 1-2. 압축되지 않는다면 2번으로! 2. size/2 만큼 잘라서 재귀호출을 하여 1번의 과정을 반복한다. 2-1. size/2를 자르고 포인트는 dx, dy를 아래와 같이 설정하는 것이다. static double[] dx = {0, 0, 0.5, 0.5}; static double[] dy = {0, 0.5, 0, 0.5}; 내가 놓쳤던 부분 - 전체가 똑같은 0이나 1로 채워져있는 경우를 반영해주지 않았다! 소스 코드 import j..

[JAVA] 기본 입출력(Scanner vs BufferedReader 차이)

자바를 처음 배우게 되었을 때, 대부분 Scanner를 사용했을 것이다..! 그러나, 최근에 알고리즘 공부를 하다가 BufferedReader의 존재를 알게 되었다! 이것들의 차이를 보니 속도면에서 상당히 큰 차이를 가지고 있다고 한다. Scanner 사용방법 Scanner sc = new Scanner(System.in); BufferedReader 사용방법 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 1. int값을 입력받을 때 - N = Integer.parseInt(br.readLine()); 2. String을 입력받을 때 - String s = br.readLins(); StringTokenizer 사용하는..

LANGUAGE/JAVA 2020.01.31