알고리즘 384

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

풀이 간단하게 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

[프로그래머스, 파이썬] 푸드 파이터 대회

풀이 칼로리에 따른 음식의 수를 담은 food를 순회하면서 li라는 배열에 음식의 수//2를 한 몫의 수 만큼 인덱스를 곱한 문자를 추가 이후 s에 배열에 담긴 문자들을 합친 다음 물인 0을 추가하고 이후 s를 거꾸로 추가하여 해결 def solution(food): li = [] for i in range(1,len(food)): if food[i]//2: li.append(str(i)*(food[i]//2)) s = "".join(li) return s+"0"+s[::-1]

알고리즘 2024.03.14

[프로그래머스, 파이썬] 문자열 내 마음대로 정렬하기

풀이 해당 문제는 특정 규칙에 따른 정렬하는 것으로 인덱스 n에 따른 정렬과 같은 문자의 경우엔 해당 문자에 대한 앞순서로 정렬하는 문제이기에 lambda를 사용하여 첫 번째로는 x의 n번째에 해당하는 인덱스 규칙 적용 후 같다면 문자 x 순서에 따라 정렬한 것으로 해결 def solution(strings, n): return sorted(strings, key= lambda x:(x[n],x))

알고리즘 2024.03.14

[프로그래머스, 파이썬] 땅따먹기

풀이 해당 문제는 DP를 활용한 문제로 해당 유형의 DP는 자주 사용하는 방식이기에 꼭 기억하고 있으면 좋다. for을 활용하여 1번째 인덱스의 land 위치에서 이전 값에서 현재 j의 인덱스 위치가 아닌 값들 중 가장 큰 값을 현재 값에 누적합하여 최종적으로 마지막 land의 배열 중 가장 큰 값을 전달하여 해결하는 방법 def solution(land): for i in range(1,len(land)): for j in range(4): land[i][j] += max(land[i-1][:j]+land[i-1][j+1:]) return max(land[-1])

알고리즘 2024.03.13

[프로그래머스, 파이썬] 명예의 전당 (1)

풀이 해당 문제는 명예의 전당에 있는 점수 중 최저점을 결과로 출력하는 것이기에 heapq를 사용하면 좋을 것 같다는 생각을 했다. 그래서 li를 초기값으로 -1로 준 다음 heapq로 변경한 다음 score 길이 만큼 반복하여 현재의 점수가 li에 있는 최소값 보다 클 경우 추가하고 heapq에 최소값을 빼고 현재 점수를 추가하는 형식으로 했으며 여기서 num은 i가 k보다 작을 경우 초기값인 -1로 계속 들어올 것이기에 num을 넣어 해결 해당 문제에서 이상하게 9,11번이 런타입 에러가 발생해서 어떤 문제일까 고민을 했는데 k가 score의 길이보다 큰 경우에 대해서 처음에 생각하지 못했던 것이었다. import heapq def solution(k, score): result = [0]*len(s..

알고리즘 2024.03.13