Algorithm/inflearn 90

★쇠막대기

5. 쇠막대기 설명 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저의 배치는 다음 조건을 만족한다. • 쇠막대기는 자신보다 긴 쇠막대기 위에만 놓일 수 있다. - 쇠막대기를 다른 쇠막대기 위에 놓는 경우 완전히 포함되도록 놓되, 끝점은 겹치지 않도록 놓는다. • 각 쇠막대기를 자르는 레이저는 적어도 하나 존재한다. • 레이저는 어떤 쇠막대기의 양 끝점과도 겹치지 않는다. 아래 그림은 위 조건을 만족하는 예를 보여준다. 수평으로 그려진 굵은 실선은 쇠막대기이고, 점은 레이저의 위치, 수직으로 그려진 점선 화살표는 레이저의 발사 방향이다. 이러한 레이저와 쇠막대기의 배치는 다..

Algorithm/inflearn 2021.09.19

후위식 연산

import java.util.Scanner; import java.util.Stack; public class Main { public int solution(String str) { int answer = 0; Stack stack = new Stack(); //숫자들을 일단 스택에 넣어놔라 for(char x : str.toCharArray()) { //숫자일 때 if(Character.isDigit(x)) stack.push(x-48); //연산자를 만났을 때 else { int rt = stack.pop(); //오른쪽 숫자 int lt = stack.pop(); //왼쪽 숫자 if(x=='+') stack.push(lt+rt); else if(x=='-') stack.push(lt-rt); e..

Algorithm/inflearn 2021.09.17

★크레인 인형뽑기

3. 크레인 인형뽑기(카카오) 설명 게임개발자인 죠르디는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다. 죠르디는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다. 게임 화면은 1 x 1 크기의 칸들로 이루어진 N x N 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 5 x 5 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 1 x 1 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인형은 바구니에 쌓이게 되는 ..

Algorithm/inflearn 2021.09.17

괄호문자제거

import java.util.Scanner; import java.util.Stack; public class Main { public String solution(String str) { String answer = ""; //(A(BC)D)EF(G(H)(IJ)K)LM(N) //괄호의 짝을 찾으면 괄호포함 사이의 문자열 pop //여는 괄호까지 pop 시켜버리면 됨. Stack stack = new Stack(); for(char x : str.toCharArray()) { if (x == ')') { //'('까지 pop 시켜야함. //★ pop은 꺼낸 값을 return 하기도 함. //꺼내고 + 꺼낸 값을 return //여는 괄호를 꺼낸 후에 멈춘다! //일단 꺼낸 상태기 때문에 ')'이전부터 ..

Algorithm/inflearn 2021.09.17

#올바른 괄호

import java.util.Scanner; import java.util.Stack; public class Main { public String solution(String str) { String answer = "YES"; //(()(()))(() //괄호 문제는 대부분 stack //stack에서 여는 괄호는 push 닫는 괄호는 pop //끝났는데 남아있거나 닫아야하는데 비어있으면 NO //끝났는데 비어있으면 YES Stack stack = new Stack(); for(char x : str.toCharArray()){ if(x == '(') stack.push(x); else { //닫는 괄호가 많은 상황 //여는 괄호를 pop 시켜줘야 짝이 맞음! if(stack.isEmpty()) r..

Algorithm/inflearn 2021.09.17

★K번째 큰 수(TreeSet)

사용법을 기억. import java.util.Collections; import java.util.Scanner; import java.util.TreeSet; public class Main { public int solution(int a, int b, int[] arr) { //K번째 수가 존재하지 않으면 -1를 출력 int answer = -1; //★중복 제거와 정렬을 하려면 TreeSet을 이용하면됨 TreeSet Tset = new TreeSet(Collections.reverseOrder()); //Collections.reverseOrder()은 내림차순.. 기본 값은 오름차순 //i < a 이라고 해도 되는이유는 for문 k for문 j for문에서 거짓이 되버리니까 이렇게 해도 상관..

Algorithm/inflearn 2021.09.16

★모든 아나그램 찾기(Hash, sliding Window : 시간복잡도 O(n))

import java.util.HashMap; import java.util.Scanner; public class Main { public int solution(String a, String b) { int answer = 0; HashMap am = new HashMap(); HashMap bm = new HashMap(); //bacaAacba //abc //bm 먼저 세팅(abc) for(char x : b.toCharArray()) bm.put(x, bm.getOrDefault(x, 0) + 1); //b 한개 전만큼 am을 세팅 -> two pointer 사용을 위해서(ba) int L = b.length()-1; //2 for(int i = 0; i < L; i++) am.put(a.cha..

Algorithm/inflearn 2021.09.16

★아나그램(Hash)

import java.util.HashMap; import java.util.Scanner; public class Main { public String solution(String s1, String s2) { String answer = "YES"; HashMap map = new HashMap(); for(char x : s1.toCharArray()) { map.put(x, map.getOrDefault(x, 0)+1); } for(char x : s2.toCharArray()){ //키가 없거나 value 값이 이미 0이면 아나그램이 아님 //마지막 문자돌 때 그 키의 value 값이 0이 아니어야함!! if(!map.containsKey(x) || map.get(x) == 0) return "..

Algorithm/inflearn 2021.09.15

#학급 회장(Hash)

import java.util.HashMap; import java.util.Scanner; public class Main { public char solution(int n,String s) { char answer = ' '; HashMap map = new HashMap(); for(char x : s.toCharArray()) { //x라는 키값을 가져오고 값이 없으면 0 넣어라 //첫번째 map.put(x, map.getOrDefault(x, 0)+1); } int max = Integer.MIN_VALUE; //키 값 뽑아 내기 for(char key : map.keySet()) { /*System.out.println(key + " " + map.get(key));*/ if(map.get(..

Algorithm/inflearn 2021.09.15