알고리즘 7

[프로그래머스] 시저 암호 풀이 - 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

[프로그래머스] 무지의 먹방 라이브 - 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..

[프로그래머스] N으로 표현

[프로그래머스] N으로 표현 문제 설명 [ 생각하기 ] 1. N의 숫자만을 사용하여 사칙연산을 할 수 있고, 그 결과가 number 이 나오는 최소한의 N의 개수를 구하는 문제이다. 2. N의 개수의 범위가 1~8, N을 1~8번 사용해서 만들 수 있는 수 중 number이 나오는지 파악하면 된다. (N = 5라고 가정) 5의 개수가 1 5 5의 개수가 2 55 5+5, 5-5, 5*5, 5/5 5의 개수가 3 555 [5의 개수가 1] (사칙연산) [5의 개수가 2] [5의 개수가 2] (사칙연산) [5의 개수가 1] 5의 개수가 4 5555 [5의 개수가 1] (사칙연산) [5의 개수가 3] [5의 개수가 2] (사칙연산) [5의 개수가 2] [5의 개수가 3] (사칙연산) [5의 개수가 1] 이게 ..

알고리즘 2020.06.18

[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