자바 123

[프로그래머스, 자바] 특이한 정렬

풀이 파이썬으로 해결하면 정말 간단한 문제이고 간결한 코드로 해결되는데 역시 자바는 아직 익숙하지 않아 좀 코드가 긴 것 같다. 우선 해결 방법으로는 2차원 배열을 사용하던지, Map을 사용하면 좋을 것 같아서 그냥 HashMap을 사용하여 접근하기로 함 이후 n과 numlist에 있는 정수와의 차의 절댓값을 key로 하여 값이 있다면 기존 배열에 값을 추가하고 없다면 배열을 생성후 값을 추가하기로 함 이때 배열 생성하면서 초기값을 추가하고자 한다면 Arrays.asList()로 값을 추가하면 된다. 만약 여러 개의 값일 경우에도 콤마(,)를 적용해서 값을 더 추가하면 된다. 이후 dic에 있는 key 목록들을 조회하는 dic.keySet()을 정렬하기 위해 새롭게 배열을 생성 후 Collections로..

알고리즘 2024.03.19

[프로그래머스, 자바] 배열 자르기

풀이 해당 문제 또한 다양한 방법이 있었지만 처음 접근한 것은 Arrays.stream()에 특정 길이 만큼 자르는 방법이 있는지 몰라서 받아오는 배열의 타입과 같은 배열 하나를 return할 길이 만큼 생성 한 다음 for문을 활용하여 추가하여 해결했는데 자바에서도 Arrays.stream()을 활용하여 첫 인자로는 배열, 두 번째 인자로는 시작 위치, 세 번째 인자로는 마지막 위치를 넣어주고 다시 배열로 만들어주기 위해서 toArray() 메서드를 사용하여 해결. import java.util.*; class Solution { public int[] solution(int[] numbers, int num1, int num2) { return Arrays.stream(numbers,num1,num2..

알고리즘 2024.03.16

[프로그래머스, 자바] 배열 뒤집기, 문자열 뒤집기

풀이 해당 문제는 포스팅은 따로 작성한 이유는 방법에 대하여 포스팅을 해두면 기억을 오랫동안 할 수 있을 것 같아서 따로 포스팅을 하게 되었습니다. 우선 배열을 뒤집는 방법은 다양하게 있지만 자바는 파이썬 처럼 모든 배열을 reverse() 이렇게가 안되고, 타입에 따른 reverse()가 있기에 해당 문제로 받아오는 배열은 int[] 이었기에 int[] 타입의 배열을 따로 하나 더 만든 다음 Arrays.setAll()을 사용해서 변경하기로 했다. 첫 번째 인자로는 변경하고자 하는 배열, 두 번째 인자로는 인덱스를 넣어 주고 해당 메서드는 return값이 null 이기에 실행 후 변경된 배열을 return하여 해결 그리고 문자열 뒤집기의 경우엔 StringBuilder에도 reverse()가 있는지 모..

알고리즘 2024.03.16

[프로그래머스, 자바] 외계어 사전

풀이 해당 문제는 파이썬으로는 정말 간단하고 빠르게 해결할 수 있었을텐데 역시 익숙하지 않아 시간이 필요한 문제였다. 배열에 대한 다양한 사용방법에 대한 것과 비교하는 방법 등에 대한 문제로 계속 익숙해져야 할 문제인 것 같으며, 해결 방법으로는 spell 크기 만큼 0 값으로 채운 check와 dic을 반복할때 마다 1로 채운 li를 생성한 다음 문자를 char 형태로 만든 배열을 만들고 이후 비교하면서 같다면 li에 특정 문자의 인덱스 위치에 -1씩 차감하고 이후 check,li의 배열을 비교하기 위해 Arrays.equals()를 사용하려는데 여기서 Collections.nCopies() 사용하면 고정된 배열을 사용하는 것이기에 toArray()로 다시 배열 형태로 만들어서 비교하여 해결 class..

알고리즘 2024.03.15

[프로그래머스, 자바] 캐릭터의 좌표

풀이 간단하게 board의 길이에 따른 최대 크기를 mx에 담아둔 다음 방향에 따라 answer의 값을 추가 여기서 차감할 때는 abs 메서드를 사용해서 확인하기 class Solution { public int[] solution(String[] keyinput, int[] board) { int[] mx = new int[]{board[0]/2,board[1]/2}; int[] answer = new int[]{0,0}; for (String key: keyinput) { if (key.equals("right") && mx[0] >= answer[0]+1) answer[0] += 1; else if (key.equals("left") && mx[0] >= Math.abs(answer[0]-1)) a..

알고리즘 2024.03.15

[프로그래머스, 자바] 로그인 성공?

풀이 아주 간단한 문제이기에 따로 설명은 없지만 혼동이 왔던 점으로는 문자열의 길이를 구할 때는 length()를 사용하지만 배열에는 length만 사용한다는 것. class Solution { public String solution(String[] id_pw, String[][] db) { for (int i=0; i < db.length; i++) { if (db[i][0].equals(id_pw[0])&& db[i][1].equals(id_pw[1])) return "login"; else if (db[i][0].equals(id_pw[0])) return "wrong pw"; } return "fail"; } }

알고리즘 2024.03.15

[프로그래머스, 자바] 다항식 더하기

풀이 우선 해당 문제는 StringTokenizer를 사용하여 빈 공백을 제거한 문자를 받아서 x와 함께 있는 문자는 substring을 사용해서 x 전까지만 정수 타입 x에 담고 정수만 있는 경우 y에 담아서 조건 처리 후 해결. 자바 문제는 또 오랜만에 풀다보니 쉽지 않았어서 헷갈렸던 코드에 대해 한 번 끄적이고 마무리 하겠습니다. 우선 StringTokenizer로 분해된 문자가 몇개 있지 모를 경우엔 hasMoreTokens()를 사용해서 반복할 수 있도록 하기 또한 substring에 첫 인자값만 넣으면 하나만 되는 것으로 기억하고 있었는데 그게 아니였다. 그리고 String.format()을 사용해서 문자안에 %d,%s,%f로 원하는 타입의 값을 추가할 수 있다는 것. import java.u..

알고리즘 2024.03.15

[프로그래머스, 자바] 완주하지 못한 선수

풀이 HashMap을 활용한 풀이 방법으로 hm에 participant의 key가 있다면 값을 1 증가 시키고 없다면 1로 초기화 한 다 completion 의 개수만큼 1 감소 시킨 다음 마지막으로 값이 0이 아닌 경우를 찾아 return하여 해결 import java.util.HashMap; public class 완주하지못한선수 { public static void main(String[] args) { Solution s = new Solution(); String[] participant = {"mislav", "stanko", "mislav", "ana"}; String[] completion = {"stanko", "ana", "mislav"}; System.out.println(s.solu..

알고리즘 2024.02.26

[백준, 자바, 1384번] 메시지

풀이 name과 check 2차원 배열을 만들어 둔 다음 반복문을 통해 받아오는 입력 값 중 첫 값은 name, 이 후의 값을 확인하여 인덱스 값을 추가한 다음 다시 반복문을 순회하며 check에 추가된 인덱스 값에 맞게 출력문을 출력하며 state에 따른 출력문 또한 함께 출력 예시에선 N으로 된 나쁜 말을 작성하는 친구가 한 명 뿐이지만 숨어있는 입력값으로는 더 많을 것으로 예상되어 아래와 같이 코드를 작성하여 해결 import java.io.*; import java.util.*; public class 메시지 { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new In..

알고리즘 2024.02.13

[백준, 자바, 1380번] 귀걸이

풀이 2*n-1 줄로 주어지는 입력 값 중 첫 번째 입력값인 인덱스를 통해 cnt 배열에서 -1 하여 마지막 for문에서 cnt의 값이 1인 인덱스를 name에서 찾아 tc 와 함께 출력하여 해결 import java.io.*; import java.util.*; public class 귀걸이 { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int tc = 1; while (true) { int n = Integer.parseInt(br.readLine()); if (n == 0) break; ArrayList n..

알고리즘 2024.02.13