프로그래머스 132

[프로그래머스, 자바] 문자열 밀기

풀이 StringBuilder를 사용해서 문자를 추가하고 초기화하여 해결. 여기서 기존 문자간의 비교는 equals() 메서드를 사용했지만 StringBuilder와의 문자열과의 비교는 equals()로는 안되고 contentEquals()로 해야 한다는 것을 알게 되었다. 그리고 초기화는 sb.delete()로 시작과 끝 인덱스 값을 넣어주기. 그런데 이렇게 풀지 않고 그냥 A를 두배로 늘려서 B가 어디에 있는지 indexOf()로 찾는 방법도 있어서 아래 두 번째 해결 방법으로 풀 수도 있음. class Solution { public int solution(String A, String B) { int ln = A.length(); StringBuilder sb = new StringBuilder(..

알고리즘 2024.03.19

[프로그래머스, 자바] 배열 만들기 2

풀이 해당 접근 방법은 l과 r 사이의 숫자 중 0 또는 5로 나누어 떨어지는 숫자를 찾고 해당 숫자를 String으로 변경 한 다음 charAt()으로 해당 인덱스의 문자가 0과 5로 이루어져 있는지 확인 후 아니라면 state 변경과 탈출 이후 state에 따라 값을 result에 추가하고 마지막으로 result가 비어있는지 확인 후 값을 반환하여 해결 import java.util.*; class Solution { public int[] solution(int l, int r) { ArrayList result = new ArrayList(); for (int i=l; i

알고리즘 2024.03.19

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

풀이 파이썬으로 해결하면 정말 간단한 문제이고 간결한 코드로 해결되는데 역시 자바는 아직 익숙하지 않아 좀 코드가 긴 것 같다. 우선 해결 방법으로는 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

[프로그래머스, 파이썬] 택배상자

풀이 해당 문제는 택배를 메인 컨테이너와 서브 컨테이너에 배치하면서 요청 대로 알맞은 순서에 맞게 쌓아져 갈 수 있는 택배의 개수를 세는 문제로 서브 컨테이너는 추가한 순서의 역순으로 빼낼 수 있는 후입선출이기에 deque를 사용하면 좋을 것 같다고 생각하여 아래와 같이 작성 후 해결 여기서 시간 초과가 한 번 발생했는데 이유는 i와 order[0]이 같을 경우 order[0]을 del 시켜 제거하도록 했어서 해결하기 위해 idx 변수로 적용하여 해결하도록 했음. from collections import deque def solution(order): main = [] sub = deque([]) idx = 0 for i in range(1,len(order)+1): if i != order[idx]:..

알고리즘 2024.03.14