본문 바로가기

TIL14

정렬 메소드 관련 이야기 흔히 아는 정렬 메소드로는 Arrays.sort Collections.sort 이 두 개가 있다. 두개의 특징은 아래와 같다. Arrays.sort dual-pivot QuickSort 알고리즘 사용 평균 시간 : O(NlogN) 최악 시간 : O(N^2) Stable 하지 않다 Collections.sort TimeSort ( merge sort + insertion sort) 시간복잡도 : O(N) ~ O(NlogN) 보장 -> insertion의 최선 O(N) + 합병정렬의 최악 O(NlogN) Stable 하다 간혹 알고리즘 문제 풀다가 보면 Arrays.sort로 풀면 안풀리는데 Collections.sort로 풀면 풀리는 경우가 있다. 그런 경우는 테스트 케이스에 O(N^2)가 걸리도록 하는 .. 2022. 4. 18.
재귀함수 공부...(feat. Counting Cells in a Blob) 문제는 https://www.youtube.com/watch?v=HHJFlVT1tBw 요기에 있다. 이번에는 그냥 문제만 보고 풀어봤다. 이전 미로문제처럼 비슷하게 풀면되겠거니 생각해서 처음 코드를 짰을 때는 뭔가 base 부분이 이상했다. 어떻게 코드를 시작했냐면 아래와 같이 시작했다. public static boolean recur(int[][] board, int x, int y, boolean prev) { if (x = board.length || y = board.length || board[y][x] == 1) { return false; } else if (board[y][x] == 0) { ... return true; } ..... } 이럴 경우 맨.. 2022. 4. 12.
재귀함수 공부하기.. (feat. 미로찾기) 재귀함수를 공부하는데 유튜브의 권오흠교수님의 강의를 보면서 공부를 했다. 재귀함수를 만들려면 노하우가 암시적 매개변수를 명시적 매개변수로 바꾸라! 라고 하셨다. 이번 미로 찾기 문제는 미로가 주어지고 거기까지의 경로를 구하는 문제였는데, 힌트 한번보고 재밌게 풀었다.. import java.util.Stack; public class Test { public static final int[][] dir = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; public static void main(String[] args) { boolean[][] board = {{true,true,true,true,true,true,true,false},{true,false,false,true,false.. 2022. 4. 12.
Format 함수에서 %02s 시 FormatFlagsConversionMismatchException 발생하는 이유 https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html Formatter (Java Platform SE 7 ) 'e' '\u0065' Requires the output to be formatted using computerized scientific notation. The localization algorithm is applied. The formatting of the magnitude m depends upon its value. If m is NaN or infinite, the literal strings "NaN" or "Infinity", resp docs.oracle.com 보통 Format함수 쓸 때는 %[flags][.. 2022. 4. 8.
프로그래머스 : 베스트 앨범 이런 문제 너무 재밌다.. 제로베이스 연습문제였는데 이렇게 따로 클래스를 선언해서 풀었다. 따로 클래스에서 처리해줄거 처리해주니 편하게 로직을 작성할 수 있었다. 아래는 그냥 일반 실행용 코드 import java.util.*; class Music { private int id; private int num; public Music(int id, int num) { this.id = id; this.num = num; } public int getId() { return id; } public int getNum() { return num; } } class Genre { private int total = 0; private ArrayList musics = new ArrayList(); privat.. 2022. 4. 7.
백준 1874번 : 스택 수열 맞게 푼 것 같고 답도 잘나오는데 자꾸 실패가 떴다. import java.util.*; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); ArrayList list = new ArrayList(); for (int i = 0; i < n; i++) { list.add(sc.nextInt()); } solution(n,list); } public static void solution(int n, ArrayList list) { int lCnt = 0; int pCnt = 1; // pop한 회수, 절대 n+1만큼 넘어갈 수 없다. Stack stack =.. 2022. 4. 7.
백준 3190 : 뱀 제로베이스 강의에 연습문제로 있길래 그냥 하드코딩으로 풀었는데 백준에 있는 문제였다.. 시간이 좀 걸렸지만 게임만드는 것 같아서 재밌게 풀었던 것 같다. 그리고 확실히 세세하게 필요한 기능을 나눠서 구현한 후 순서에 맞게 조립하니까 잘 풀어진 것 같다. 문제 설명 --- 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다. 뱀은 매 초마다 이동을 하는데 다음과 같은.. 2022. 4. 7.
MxN 행렬 데이터의 특정 원소의 행,열 모두를 변경하기 정수로 이루어진 M x N 행렬 데이터가 있다고 하자 행렬의 원소 중에 0이 있을 경우 해당 원소가 위치하는 행,열 전체 데이터를 0으로 변경하는 코드를 작성하라. 제로베이스 문제 풀이에서는 다르게 풀었지만 boolean써가면서 푸는게 이해가 잘 안되서 그냥 내 식대로 풀어봤다. import java.util.*; import java.util.stream.IntStream; class Main { public static void main(String[] args) { int[][] matrix = {{1, 1, 1}, {1, 0, 1}, {1, 1, 1}}; solution(matrix); System.out.println(); matrix = new int[][]{{1,1,0},{1,1,1},{0,.. 2022. 4. 6.
파스칼의 삼각형 파스칼의 삼각형은 다음과 같이 만들 수 있다. 1. 첫 번째 줄에는 숫자 1을 쓴다. 2. 그 다음 줄은 바로 위의 왼쪽 숫자와 오른쪽 숫자를 더한다. 입력 출력 1 [[1]] 3 [[1], [1, 1], [1, 2, 1]] 5 [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]] 처음으로 완벽하게 풀어서 올려봅니다.. 흑흑 import java.util.ArrayList; public class Practice1 { public static ArrayList solution(int numRows) { ArrayList outer = new ArrayList(); // 파스칼 삼각형 전체 for (int i = 0; i < numRows; i++) { // .. 2022. 4. 1.
컬렉션에서 중복값 찾아내기 Collections.frequency 이용 - 컬렉션 안에 있는 객체가 몇번 등장했는지 횟수를 리턴해준다. 사용법 Collections.frequency(객체를 담고 있는 컬렉션 인스턴스, 중복을 확인할 객체) 예시 int[] 배열에 중복값이 존재하면 중복값만 뽑아서 리스트로 만들어라 // int[] nums 가 존재. // 우선 int[]배열을 리스트로 변환 // Arrays.stream(int 배열) 로 IntStream 으로 변환 -> boxed로 Stream -> collect로 List로 변환 ArrayList list = (ArrayList) Arrays.stream(nums).boxed().collect(Collectors.toList()); ArrayList answer = (ArrayL.. 2022. 3. 30.
원시값 배열을 Stream을 이용해서 리스트로 바꾸기 // nums라는 int[] 이 존재할 때 ArrayList list = (ArrayList) Arrays.stream(nums).boxed().collect(Collectors.toList()); boxed()를 사용하면 IntStream같은 원시타입 스트림을 Wrapper타입 스트림으로 바꿔준다 ex) IntStream -> Stream Arrays.asList로는 원시타입 배열을 컬렉션으로 바꾸기 어려운데 스트림을 이용해서 바꾸면 편하게 바꿀 수 있다..! 2022. 3. 30.
자바 기초 문제 - 사탕 나눠 주기 문제 N 명의 아이들이 한 줄로 서있다. 각각의 아이들은 점수 표를 가지고 있는데 점수 표에 따라 다음과 같은 규칙으로 사탕을 나누어 줘야 한다. 적어도 1개 이상의 사탕을 나누어줘야 한다. 점수가 높은 아이에게는 바로 옆의 아이 보다는 사탕을 많이 줘야 한다. N 명의 아이들에 대한 점수 표가 ratings 배열에 주어질 때, 나누어 줘야하는 최소한의 사탕 개수를 출력하세요. 입출력 예시 입력 출력 1 2 3 6 3 2 1 6 1 0 2 5 1 2 2 4 1, 3, 5, 3, 1, 3, 5, 7, 5, 3, 1, 0 무조건 한개 이상씩 들고있어야하니 기본적으로 하나씩 아이들에게 쥐어 준 후, 이전 아이와 비교해주고 이전 아이의 사탕 개수에 변동이 생기니 이전아이보다 더 이전에 있던 아이와도 다시 비교 .. 2022. 3. 30.
자바 기초 문제(커서 편집기) 제로베이스 백엔드 스쿨에서 연습문제가 나오길래 한번 풀어보았다. 편집기에는 문자열과 편집 명령어가 주어지는데, 명령어의 동작은 다음과 같다고 한다. L : 커서를 왼쪽으로 한칸 이동(커서가 문장의 맨 앞이면 무시) D : 커서를 오른쪽으로 한칸 이동(커서가 문장의 맨 뒤이면 무시) B : 커서 왼쪽에 있는 문자를 삭제(커서가 문장의 맨 앞이면 무시) P x : x라는 문자를 커서 왼쪽에 추가 커서의 시작은 문자열에서 편집이 시작되는 위치가 시작점이다. 초기 문자열과 명령어가 주어졌을 때 결과를 출력하라 라는 문제이다. 초기 문자열 명령어 결과 출력 "aba" "L B" "aa" "abcd" "P x L P y" "abcdyx" 이런식으로 되어야하는데 나는 어떻게 풀었냐면 public class Test .. 2022. 3. 29.
자바 char 배열을 List로 변환하기(Stream으로 변환하기) char 배열을 List로 바꿔서 사용하고 싶은데 자꾸 안돼서 stream으로 변환해서 바꾸려고 했었다. char[] arr = {'a','b','c'}; // Arrays.asList(arr) 는 List 로 반환해서 내가 원하던게 아니었다. // Arrays.stream(arr) 에러발생!!! // 만약 int 배열이라면 IntStream으로 변환이 가능했을텐데 char는 그게 안된다. 안되길래 찾아보니 char는 원시타입이기 때문에 Stream으로 변경 불가능하고 래퍼 클래스로 감싸줘야 한단다. 그래서 그냥 ArrayList하나 만든 후 for each를 통해서 add로 하나씩 넣어줬다. ArrayList list = new ArrayList(); for (char c : arr) { // new .. 2022. 3. 29.