스택(Stack) 자료구조를 공부하면 제일 먼저 만나게 되는 스택(Stack) 게임을 좋아하는 사람들은 이미 스택에 대한 기본적인 느낌은 무엇인지 느낄 수 있을 것이다. 그렇다 스택은 바로 중첩 이라는 의미로 쌓이다라는 의미를 가지고 있는 말이다. 그렇다면 이러한 스택의 특성은 무엇인지 생각해보자. 상자안에 있는 책들이 들어 있다고 보자 해당 박스안에 있는 제일 아래있는 책을 꺼내려면 어떻게 해야 하는가? 당연히 하나씩 꺼내서 빼야한다. 스택은 이렇게 맨마지막에 들어간 것을 제일 먼저 빼게 되는데 이것을 후입선출 멋진말로는 "Last In Fist Out ; LIFO "이라고 한다. 종종 다른 곳에서는 선입후출 "First In Last Out;FILO" 라고도 하는데 스택의 기본적인 특성은 같은 것이니..
문제 나의 생각 - 백준은 처음 풀어보는데 문제를 이해하기가 너무 어려운 듯 하다. 다른 사람들의 설명 그림을 몇 개 보고 알고리즘을 짜봤다. - false 기준으로 설명 해보고자 한다. n = 5 arr = 5, 4, 3, 2, 1 - 먼저 5라는 숫자를 입력하자고 하면 바로 입력이 된다. - 그 다음 들어오는 4는 처음 스택에 들어간 값보다 작기 때문에 다음 스택에 들어간다. - 그 다음 들어오는 3은 첫번째, 두번째 스택보다 작은 값이기에 다음 스택에 들어간다. - 그 다음 들어오는 2는 앞에 3개의 스택의 값보다 작기 때문에 다음 스택에 들어간다. - 마지막 1값은 4개의 스택의 peek 값보다 작기 때문에 다음 스택에 넣어야 하나 4개를 넘었으므로 false가 나온다. 나의 답안 import j..
문자 나의 생각 해당 문제는 부트캠프에서 stack을 이용하여 풀라고 한 내용으로 최대한 stack을 사용하여 풀어 본 문제이다. while - for 문을 이용한 풀이로 start 정수형 타입을 하나를 두고 (start + 1) ~ arr.size() 까지 가면서 같은 값이 없을 때 stack에 psuh() 하는 방식으로 접근. length(), legnth()-1 값이 같은 경우 무한로직이 돌아서 해당 경우의 수만 따로 처리하는 if 문 추가. 나의 답안 public static int[] solution(int[] arr) { Stack stack = new Stack(); int start = 0; while(start < arr.length){ for (int i = start; i < arr...
문제 나의 생각 해당 문제는 stream에 있는 sort를 활용하여 해결한 문제이다. compare함수를 사용하여 -1 , - ,1 값을 반환 받아서 앞으로 가야하는지 가만히 있어야 하는지, 뒤로가야하는지 판단하고 처리하는 방식이다. 나의 답안 public int[] solution(int[] numlist, int n) { return Arrays.stream(numlist) .boxed() .sorted((a,b) -> Math.abs(a - n) == Math.abs(b - n) ? b.compareTo(a) : Integer.compare(Math.abs(a-n), Math.abs(b -n))) .mapToInt(Integer::intValue) .toArray(); } 공부한 내용 - x.com..
문제 나의 생각 a ~ b 사이에 숫자를 더해주면 되는 간단한 문제 a > b 보다 큰경우는 서로 변경을 해주어서 진행. 제한조건이 int 값을 넘으니 long 타입으로 지정하여 진행. 나의 답안 public static long solution(long a, long b) { long answer = 0; if (a > b) { long temp = a ; a = b; b = temp; } for (long i = a; i
문제 나의 생각 long 타입 매개변수를 일의 자리씩 나누어 list에 담아주고 collections 함수를 이용하여 정렬처리 후 String -> Long 타입으로 변환. 나의 답안 public static long solution(long n) { String after = ""; ArrayList list = new ArrayList(); while ( n > 0) { list.add(n % 10); n /= 10; } Collections.sort(list, Collections.reverseOrder()); for (int i = 0; i < list.size(); i++) { after += list.get(i); } return Long.parseLong(after); } 다른 답안 impo..