전체 글200 [Lv. 1] 명예의 전당(1) 두 가지 경우로 나눴다! 명예의 전당에 점수가 꽉 차지 않은 경우와 꽉 차있는 경우! 꽉 차있지 않은 경우는 그냥 선언한 리스트에 들어오는 점수를 추가해주고 정렬해서 최솟값 출력! 꽉 차있는 경우는 기존 명예의 전당에 있던 최솟값과 새로 추가 되는 i 번째 값을 비교한 후 새로 추가되는 값이 최솟값보다 크다면 기존값을 지우고 리스트에 새로운 값을 추가해주는 식으로 풀었다! 출력해야하는 값이 최솟값이므로 리스트의 0번째 값을 출력하도록 만들었다! import java.util.*; class Solution { public int[] solution(int k, int[] score) { int[] answer = new int[score.length]; int min = 0; List list = new.. Algorithm/프로그래머스 2023. 9. 7. [Lv. 1] 푸드 파이트 대회 food[0]은 무조건 물이므로 반복문을 돌 때 i = 1부터 돌게 만들었다 첫 루프에서 food 배열의 길이만큼 돌고 두 번째 루프에서 한 명이 i번째 음식을 몇개나 먹을 수 있는지 구했다 이 후부터는 문제에서 주어진 대로 물을 추가하고 그 문자를 그대로 뒤집어서 붙여주는 방식을 취했다! class Solution { public String solution(int[] food) { String answer = ""; String reverse = ""; for(int i = 1; i < food.length; i++){ for(int j = 0; j < food[i]/2 ; j++){ answer += i; } } StringBuilder sb = new StringBuilder(answer); re.. Algorithm/프로그래머스 2023. 9. 7. [Lv. 2] 줄 서는 방법 냅다 풀면 오래 걸릴 것 같아서 아이패드에 정리하면서 풀었다. 바로 포스팅을 한게 아니라 생각을 다시 하면서 포스팅을 하고 있다. 막 풀지 말고 깔끔하게 푸는 연습도 해야겠다. 우선 전체 경우의 수는 n!개 (가지처럼 경우가 뻗어나가는 그림을 상상해보자) 첫번째 자리에 가능한 수 -> n개 두번째 자리에 가능한 수 -> n-1개 세번째 자리에 가능한 수 -> n-2개 . . . n-2번째 자리에 가능한 수 -> 3개 n-1번째 자리에 가능한 수 -> 2개 n번째 자리에 가능한 수 -> 1개 이걸 사용해서 첫번째 자리의 수부터 구할 수 있다! 써보면서 풀면 간단하게 해결할 수 있다! import java.util.*; class Solution { public int[] solution(int n, lon.. 카테고리 없음 2023. 9. 2. [Lv. 2] 의상 조합의 개수만 구하면 됐는데 모든 조합을 구하려고 해서 삽질했다. 대체 왜 이랬는지 모르겠다 문제를 똑바로 읽자! 조합의 개수만 구하려고 하니 문제가 쉬워졌다! 옷의 종류별로 곱해주기만 하면 됨! import java.util.*; class Solution { public int solution(String[][] clothes) { int answer = 1; Map hash = new HashMap();//옷의 종류가 key, 개수가 value for(int i = 0; i < clothes.length; i++){ String cloth_type = clothes[i][1]; hash.put(cloth_type, hash.getOrDefault(cloth_type, 1) + 1);//이미 map에.. 카테고리 없음 2023. 9. 2. [Lv. 1] 공원산책 for문이 너무 많이 나와서 재귀로 줄여볼까...했는데 결국 실패하고 문제에서 하라는대로 나열해서 풀었더니 풀렸다 분명 간결해지는 코드가 있을텐데 리팩토링 해봐야겠다 class Solution { public int[] solution(String[] park, String[] routes) { int startX = 0; int startY = 0; int lengthX = park[0].length(); int lengthY = park.length; //공원 상태를 나타내는 이차원 배열 생성 char[][] parking = new char[park.length][park[0].length()]; for(int i = 0; i < park.length; i++) { for(int j = 0; j <.. 카테고리 없음 2023. 9. 2. [Lv. 1] 숫자 짝꿍 class Solution { public String solution(String X, String Y) { String answer = ""; StringBuilder sb = new StringBuilder(); int[] xArr = new int[10]; int[] yArr = new int[10]; for(String x : X.split("")){ xArr[Integer.parseInt(x)]++; } for(String y : Y.split("")){ yArr[Integer.parseInt(y)]++; } for(int i = 9; i>=0; i--){ while(xArr[i] > 0 && yArr[i] > 0){ sb.append(i); xArr[i]--; yArr[i]--; } } an.. 카테고리 없음 2023. 8. 28. [Lv. 2] 괄호 회전하기 처음엔 이렇게 문자열 자체로 검사를 해야하나 싶었는데 생각해보니까 정말 너무 비효율적일 것 같다는 생각이 들어서 고민을 좀 해봤다 해야할 일을 명확하게 정리했더니 두가지가 나왔다 1. 문자열이 올바른지 확인하기 2. 한 칸씩 밀어서 회전시키기 1번은 스택을 사용해서 ( 뒤에 ) [ 뒤에 ] { 뒤에 }가 붙어 나오면 pop 시켜버리고 스택이 다 비었다면 올바른 문자열들이 있는 것으로 판단하는 걸로 해결이 될 것 같았다 (이 때 스택 가장 위의 값과 그 위에 새로 쌓일 값 비교) 2번은 문자열의 길이만큼 for문을 돌리면 간단하게 해결이 될 것 같았고 import java.util.*; class Solution { public int solution(String s) { int answer = 0; St.. 카테고리 없음 2023. 8. 28. [Lv. 2] N개의 최소 공배수 x, y, z 가 있을 때 x, y의 최소 공배수가 a이면 a, z의 최소공배수와 x, y, z의 최소 공배수는 같다는 기본 성질을 활용했다 유클리드 호제법 사용해서 풀고 싶었는데 기억이 안나서 두 수(x, y)의 최소 공배수는 x * y / 최대공약수라는 공식을 사용해 answer의 값을 갱신해주는 방식을 사용했다 import java.util.*; class Solution { public int solution(int[] arr) { if(arr.length == 1){ return arr[0]; } int x = arr[0]; int answer = 0; for(int i = 1; i 0; j.. 카테고리 없음 2023. 8. 28. [Lv. 2] 점프와 순간 이동 배터리를 최소로 사용할 방법을 생각했다 -> 순간이동을 최대로 사용! 점프를 최소로 사용! n이 홀수 일 때만 1을 더해주는걸 n > 0일 때까지 반복했더니 탸댜~ 풀렸다 public class Solution { public int solution(int n) { int ans = 0; while(n > 0){ if(n % 2 != 0){ ans += 1; } n /= 2; } return ans; } } Algorithm/프로그래머스 2023. 8. 20. [Lv. 1] 바탕화면 정리 이것도 그냥 어차피 2차원 배열로 풀고 가장 큰 x,y 좌표를 저장하는 변수를 선언 해놓고 마지막에 이 좌표값에 그냥 + 1 하면 되는거 아니야??하고 냅다 풀어봤는데 그냥 풀렸다.. 넘쳐나는 if문의 향연... 분명 더 좋은 방법이 있을텐데 class Solution { public int[] solution(String[] wallpaper) { int[] answer = new int[4]; int lastX = wallpaper[0].length(); int lastY = wallpaper.length; int maxX = 0; int maxY = 0; for(int i = 0; i < wallpaper.length; i++){ for(int j = 0; j < wallpaper[0].length.. Algorithm/프로그래머스 2023. 8. 20. [Lv. 1] 신규 아이디 추천 사실 그냥 하라는대로 단계별로 했더니 풀렸다 물론...단계별로 하기 좀 귀찮길래 정규식 사용해서 풀었는데 이것 때문인지 몇몇 문제 시간이 오래 걸렸다 정규식 안쓰고 푸는 것도 해봐야겠다 class Solution { public String solution(String new_id) { String answer = ""; answer = new_id.toLowerCase(); //1단계 answer = answer.replaceAll("[^-_.a-z0-9]", ""); //2단계 answer = answer.replaceAll("[.]{2,}", "."); //3단계 answer = answer.replaceAll("^[.]|[.]$", ""); //4단계 if(answer.equals("")) { /.. Algorithm/프로그래머스 2023. 8. 20. [Lv. 2] 구명보트 1. 주어진 people을 정렬하고 최솟값 확인을 위한 min을 0으로 초기화 2. 반복문 실행 - max는 최댓값의 위치, 최솟값 위치 > 최댓값 위치일 때 반복 종료 카테고리 없음 2023. 8. 15. 이전 1 2 3 4 5 ··· 17 다음