Algorithm 306

버블정렬

import java.util.Scanner; public class Main { public int[] solution(int n, int[] arr) { //i=0일 때 마지막 값 결정되고 //i=1일 때 마지막-1 값 결정된다. //하나 남았을 때는 비교 할 필요가 없으니 n-1 전까지 돌면 된다. //1회전씩 증가할 때 마다 제일 마지막에 //큰 값이 정해지므로 n-1-i만큼 돌아주면 된다.★ for(int i = 0; i arr[j+1]) { int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } } return arr; } public static ..

Algorithm/inflearn 2021.09.20

#선택 정렬

import java.util.Scanner; //선택정렬은 하나를 선택하고 제일 작은 값을 찾아서 선택한 값과 바꿔주는 정렬 //버블정렬은 마지막 제일 큰 값이 정해지므로 n-1-i만큼 돌지만 //선택정렬은 첫번째 제일 작은 값이 정해지므로 n만큼 돌아야함 public class Main { public int[] solution(int n, int[] arr) { //마지막 전까지 찾았으면 마지막 값을 탐색하지 않아도 됨 for(int i = 0; i < n-1; i++) { int idx = i; for(int j = i+1; j < n; j++) { //arr[1] ~ arr[n-1] 까지 돌고 가장 작은 값이 idx로 들어간다. if(arr[j] < arr[idx]) idx=j; } //현재 비..

Algorithm/inflearn 2021.09.20

★응급실

import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import java.util.Stack; class Person { int id; int priority; public Person(int id, int priority) { this.id = id; this.priority = priority; } } public class Main { public int solution(int n, int m, int[] arr) { int answer = 1; Queue Q = new LinkedList(); //환자 번호와 위험도를 동시에 큐에 넣어야 하므로 //번호와 위험도를 갖는 클래스를 만들어 그 객체를 큐에 넣는다...

Algorithm/inflearn 2021.09.19

교육과정설계

import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import java.util.Stack; public class Main { public String solution(String s, String t) { String answer = "YES"; //필수 과목의 순서가 어긋났는지만 판단하면 된다. //큐에 필수과목 순서대로 미리 넣어놓는다. //나머지 수업설계를 탐색 //큐에 해당 수업이 있는지 + 큐의 맨 앞인지 확인 //true면 pop 시키고 그 다음을 진행 //큐가 비어있으면 true //C B는 바로 꺼내진다. //D는 큐에 포함 X 그 다음 A 꺼낸다. //CBA가 아니라 BCA면 포함은 되어있으나 ..

Algorithm/inflearn 2021.09.19

공주 구하기

import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import java.util.Stack; public class Main { public int solution(int n, int k) { int answer = 0; //큐에서 q.offer(x);가 넣는것 q.poll();가 빼는것(빼진 값도 리턴) //q.peek();은 제일 앞에 있는 것을 확인만 하는것 //q.contains(x);는 포함 boolean //k-1 만큼 poll 한다음에 offer 해준다. //그리고 k는 poll만 해준다. //그 과정이 한번의 루틴이다. //1명 남을 때 까지 반복 //1 2 4 5 6 7 8 -> 1 2 4 5 7 ..

Algorithm/inflearn 2021.09.19

★쇠막대기

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