알고리즘 95

String, StringBuffer, StringBuilder

String클래스는 불변 객체이기 때문에 문자열 연산이 많은 프로그래밍이 필요할 때 계속해서 인스턴스를 생성하므로 성능이 떨어지지만 조회가 많은 환경, 멀티쓰레드 환경에서 성능적으로 유리. StringBuffer클래스와 StringBuilder클래스는 문자열 연산이 자주 발생할 때 문자열이 변경가능한 객체기 때문에 성능적으로 유리. StringBuffer와 StringBuilder의 차이점은 동기화지원의 유무이고 동기화를 고려하지 않는 환경에서 StringBuilder가 성능이 더 좋고, 동기화가 필요한 멀티쓰레드 환경에서는 StringBuffer를 사용하는 것이 유리. 출처: https://jeong-pro.tistory.com/85 [기본기를 쌓는 정아마추어 코딩블로그]

[DP] 막대기, 최장공통부분수열, knapsack

package com.company; public class Main { public static void main(String[] args) { int[][] item = {{1, 6, 10}, {2, 100, 20}, {3, 120, 30}}; // int maxValue = knapsack(item, 50); // System.out.println("최대가치: " + maxValue); int[] rodPrice = {0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30}; // System.out.println("2칸일때 최대이익: " + cutRod(rodPrice, 2)); // System.out.println("3칸일때 최대이익: " + cutRod(rodPrice, 3));..

[시뮬레이션] 탈주범 검거

[모의 SW 역량테스트] 탈주범 검거https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpLlKAQ4DFAUq package com.company; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class PrisonBreak { //상하좌우 static int[] dy = {-1,1,0,0}; static int[] dx = {0,0,-1,1}; static int N,M; public static void main(String[] args) { Scanner sc = new Scanner(Syst..

[조합(재귀), 완전탐색] 치킨배달

[삼성 SW 역량 테스트 기출 문제] 치킨배달https://www.acmicpc.net/problem/15686 package com.company; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Chicken { static List shops = new ArrayList(); //치킨집의 위치를 담고있는 리스트 static List homes = new ArrayList(); //집의 위치를 담고있는 리스트 static int minDisSum = 10000; //모든 집에서의 치킨거리 합 중에서 최솟값 public static void main(String[] args) { Scanne..

[BFS] 이상한 계산기

이상한 계산기 이상한 계산기는 두 가지 버튼과 숫자를 출력하는 화면으로 구성되어 있다. 숫자를 출력하는 화면은 총 5자리의 정수를 표현할 수 있다. 각 버튼은 현재까지의 계산 결과에 어떠한 연산을 할지를 나타내는 것으로, 각 버튼은 다음과 같이 연산을 수행한다.Mul : 현재까지의 계산 결과에 2를 곱한다Div : 현재까지의 계산 결과를 3으로 나눈다. 단, 결과가 정수가 아닐 경우, 소수점 이하를 모두 버린다.계산기를 작동시키면, 현재까지의 계산 결과로써 1이 출력된다. 이후 사용자가 어떻게 버튼을 누르냐에 따라 출력되는 숫자가 달라진다. 예를 들어, 계산기를 작동시키면 1이 출력되고, 여기서 Mul를 누르면 2가 되며, 또 Mul을 누르면 4가 출력된다.영수는 이 계산기가 모든 숫자를 출력할 수 있는..

단지번호 붙이기

민경 :)단지번호 붙이기https://www.acmicpc.net/problem/2667 package com.company; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class BottleNumber { static int N; static List groups = new ArrayList(); //각 단지의 집 숫자 //상하좌우 static int[] dx = {0,0,-1,1}; static int[] dy = {-1,1,0,0}; public static void main(String[] args) { Scanner sc = new Sc..

[BFS,DFS] 타겟넘버

[프로그래머스] 깊이/너비 우선탐색(BFS/DFS) 타겟넘버 https://programmers.co.kr/learn/courses/30/lessons/43165 *재귀를 활용package com.company; public class TargetNumber { static int TARGET = 3; static int ANSWER_COUNT = 0; public static void main(String[] args) { int[] numbers = {1,1,1,1,1}; makeOperator(numbers, 0); } private static void makeOperator(int[] numbers, int k) { //k는 number의 index if(k < numbers.length){ n..

[정렬] 다리를 지나는 트럭

[프로그래머스] 다리를 지나는 트럭https://programmers.co.kr/learn/courses/30/lessons/42583 *객체 활용package com.company; import java.util.LinkedList; import java.util.Queue; public class Main { public static void main(String[] args) { // write your code here int bridge_length=2; int weight=10; int[] truck_weights={7,4,5,6}; int bWeight=0; //다리 위 트럭무게의 합 //출발대기 트럭 Queue trucks_r = new LinkedList(); for(int truck_w..

[구현] 줄기세포배양

5653. [모의 SW 역량테스트] 줄기세포배양 https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRJ8EKe48DFAUo&categoryId=AWXRJ8EKe48DFAUo&categoryType=CODE *조건이 많아서 차분하게 풀어야함. *매번 전체 맵 다 확인하도록 무식하게 만들었는데, 이정도로 통과가 되지만 효율성&구조 개선시킬 부분이 있음-전체 맵 크기 최적화-매번 전체 맵을 스캔하지 않고 필요한 부분(활성화, 비활성화, 검토)만 메모해 두었다가 해당지역만 검색 *나중에 시간나면? 개선된 방법으로 수정 package com.company; import java.util.Scanner; public..

[Hash] 완주하지 못한 선수

import java.util.*; class Solution { public String solution(String[] participant, String[] completion) { Map map = new HashMap(); //참가자를 HashMap에 입력 for(String name : participant){ if( map.get(name) == null ){ map.put(name, 1); }else{ int value = map.get(name) + 1; map.put(name, value); } } //완주자는 value를 1씩 감소 for(String name : completion){ int value = map.get(name) - 1; map.put(name, value); } ..