본문 바로가기

개발중/Algorithm

(9)
LicensKeyFormatting 하이픈 제거, 소문자를 대문자로 끝에서 4자리 끊기 String, StringBulider, StringBuffer 차이점과 장단점 이해하기 생각 -> 한국말로 적고 이해 -> JAVA 일단, 이 문자열을 하이픈(-)을 제거 하자. replacs () 함수는 (old , new) old 문자열을 new로 바꿔주는 역활을 한다 "-" 문자를 "" 제거해주도록 만들었다. toUpperCase() 함수는 소문자를 대문자로 모두 바꿔준다 이제 4자리를 끊어야 하는 일이 남았다. 전체 길이를 알아야 한다. 길이를 구한다 StringBuilder() 를 생성 문자를 버퍼에 하나씩 대입. 4부터 문자열 길이까지 돌리는데 4씩 증가하면서 길이에서 i번째를 뺀곳에다가 '-' 를 삽입하여 준다 [결 과] package s..
JewelsAndStones 오늘은 문자열에서 존재하는 알파벳애서 내가 원하는 알파벳의 개수를 찾는 알고리즘을 풀었다. S 라는 문자열에서 J 라는 문자열을 분리해서 생각하고 이 문자의 개수를 추출한다. 중복을 허용하지 않는 HeshSet 을 사용한다. toCharArray 는 문자열을 문자 배열로 만든다. jew 를 문자로 하나씩 만들고 set 에 add 시킨다. 이번에는 stone 의 문자열을 문자 배열로 가져오는 구나 contains() 함수는 대상 문자열에 특정 문자열이 포함되어 있는지 확인하는 함수이다. stonChar의 문자가 set에 존재하니? 존재한다면 1씩 증가해 그럼 내가 count 로 반환 해줄께 package soobin; import java.util.HashSet; import java.util.Set; p..
MeetingRoom2 응용 (정) 미팅룸 알고리즘을 배웠는데 사용자에게 입력을 받아서 처리를 하는 프로그램으로 응용해보고 싶다는 생각이 들어서, 완성 package soobin; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.PriorityQueue; import java.util.Queue; import java.util.Scanner; class Interval4 { int start; int end; Interval4() { start = 0; end = 0; } Interval4(int s, int e) { start = s; end = e; } } public..
MeetingRoom2 미팅룸 2 는 지금 사용하고 있는 미팅룸이 존재 하는데 그 사이에 미팅룸이 필요하다면 또 생성하는 것이다. 한 미팅룸이 끝나고 다른 미팅룸이 시작 된다면 굳이 미팅룸의 수를 하나 더늘려줄 필요가 없다. 처음에는 이해가 안갔는데 쉽게 생각하니 이해가 간다. 9시부터 저녁 9시까지 미팅룸1 을 사용하고 있는데 10시부터 3시까지 미팅룸2를 사용하고 4시부터 6시까지 미팅룸을 사용하고 있다면 미팅룸2를 사용하면 된다. start 와 end 를 나타내는 미팅룸의 사용시간을 저장하는 클래스를 정의하자. 각각 시작 시간과, 끝나는 시간을 넣어주자. solve 를 호출하는데 [ solve ] 당연히 intervals 가 비어 있다면 0 을 반환해준다 일단 받은 intervals 을 정렬을 해야지 서로 가까운 시간들끼..
Merge 알고리즘 오늘은 MergeInterval 알고리즘을 풀어 보자 Interval 함수를 만들어서 start 값과 end 값을 선언한다 Interval 의 start값과 end 값 사이에 겹치는 구간이 있다면 하나로 병합해주는 알고리즘이다. 예를 들어서 [ 1, 3 ] , [ 2, 6 ] 두번째 Interval 의 start 값이 첫번째 Interval 과 겹친다. 그럴경우 이렇게 병합 하는 것을 반복 해야 한다 => [ 1, 6 ] Interval 의 인스턴스들을 여러개 생성하고 인스턴스들을 담기 위한 그릇을 만든다. 배열에 모두 add 시켜주자. merge 함수로 intervals 을 보낸다. isEmpty() 객체가 비어있다면 그대로 돌려보내라 답을 저장할 그릇 람다식을 이용해서 오름차순으로 정렬한다. 물론 순..
Daily Temperature 생각해보자 int nums = {73, 74, 75, 71, 69, 72, 76, 73 } 온도가 높아지는 시점을 찾아라? 오늘의 온도보다 낮아질 때 그 날의 온도가 기준점이 된다? 오늘의 온도보다 높다면 기준날의 온도와 차를 구한다? stack 을 이용한다 두 개를 비교해서 하나를 어딘가에 저장을 해야한다. 온도가 커진 날을 체크해야 한다? 74 에서 73 을 뺀다 = 1번방에서 0 방을 뺀다? 이번 알고리즘은 난이도가 있구나 ,, 하지만 오늘 내가 이해하고 만다. 차근차근히! 이런 배열이 하나 준비되어 있다. 답을 구하기 위해 만든 함수로 배열을 실어 보내자. 일단 답을 담을 그릇 하나를 준비하고 for 문을 배열의 길이만큼 돌려주자 while 문을 실행하기 위한 조건은 stack 이 비어있지 않아야..
MoveZero MoveZero 루틴 합이 10 을 구하고 싶으니까 10 - 2 를 한다 결과인 8을 찾아 낸다 map 과 array를 사용한다. 문제의 의도 : index를 찾는다. 생각해보자. { 2, 8, 11, 21 } target = 10; index를 0부터 for 문을 돌린다. 10 - 2를 했는데 8이 나온다 8을 map에 등록을 한다. ( 8, 1 ) => key, value index 를 돌려서 맵에 있는 것과 매치가 된다면 index 를 구한다. import java.util.HashMap; import java.util.Map; public class TwoSum { public static void main(String[] args) { int[] nums = {2, 8, 11, 21}; int ..
MoveZeros MoveZrero 알고리즘은 배열에 있는 숫자 중에 0 인 숫자는 맨 뒤로 빼고 0이 아닌 숫자를 앞으로 가지고 오는 것이야! public class MoveZeros { public static void main(String[] args) { int[] nums = {0, 3, 2, 0, 8, 5}; int index = 0; for( int i = 0; i