[프로그래머스] 피로도 - Java(자바)
·
자바/코딩테스트
문제 이해 완전탐색 알고리즘으로 모든 경우의 수를 돌아본다. DFS 방식으로 check 배열을 만들어서 내가 다녀온 던전인지를 체크하면서 던전을 탐험한다. 피로도가 해당 던전의 최소피로도와 같거나 높을때 해당 던전을 탐험할 수 있다. 던전을 탐험할때 cnt+1 을 하여 list에 담는다. DFS가 끝이 났을때는 list에 탐험한 던전수가 들어있으므로 max값으로 return한다. import java.util.*; class Solution { static List list = new ArrayList(); static boolean[] check; public int solution(int k, int[][] dungeons) { check = new boolean[dungeons.length]; DF..
[프로그래머스] 튜플 - Java(자바)
·
자바/코딩테스트
문제 이해 특정 튜플을 표현하는 집합이 담긴 문자열이 "{","}"로 표현되어있다. 튜플 안에 집한의 원소의 순서는 바뀌어도 상관없다. 집합의 원소 개수가 answer 배열의 index와 동일하다.(1개 = answer[0], 2개 = answer[1]) 집합 개수에 맞게 오름차순을 해야한다. 집합개수 2개의 경우 (a1, a2) == (a2, a1) 가능하다. 순서 상관없이 튜플이 가능 index = 1 일때 집합의 개수 2개로 위와 같이 존재한다. list.get(0) = a1 이면 list.get(1) = a2, 반대로 list.get(0) = a2 이면 list.get(1) = a1 이 되게끔 만들어야한다. import java.util.*; class Solution { public int[] ..
[프로그래머스] [1차] 캐시 - Java(자바)
·
자바/코딩테스트
문제 이해 LRU(Least Recently Used) 알고리즘으로 캐시에 데이터를 할당할때 캐시가 꽉차면 최근에 사용안한 캐시를 지우는 알고리즘이다. 도시의 이름은 대소문자 가리지 않는다. toUpperCase() 사용 캐시를 List 객체를 사용하여 캐시에 같은 도시명이 존재하면 해당 리스트 index 삭제후 맨뒤에 도시 추가 실행시간 +1 리스트에 존재하지 않으면 실행시간 +5 캐시에 데이터가 존재하는지 확인하는 함수 생성 exitsCache(); import java.util.*; class Solution { public int solution(int cacheSize, String[] cities) { int answer = 0; List cache = new ArrayList(); if(ca..
[프로그래머스] 기능개발 - Java(자바)
·
자바/코딩테스트
문제 이해 진도가 100%가 되는 경우 배포가 되는데 앞의 기능이 끝나기 전까지 뒤의 기능은 배포를 할 수가 없다. 뒤의 기능이 앞의 기능의 배포일보다 적다면 앞의 기능 배포날에 같이 배포 된다. 개발속도에 따른 각 기능의 배포일을 구해 배열에 담는다. 배포일을 두개씩 비교하는데 맨 처음에 나온 값을 first 변수에 넣고 본인보다 큰 값이 나오기전까지 cnt를 증가 시킨다. 큰 값이 나오면 이전에 쌓인 cnt를 리스트에 담고 cnt를 초기화 새로운 값이 first 변수에 담긴다. 마지막 기능 값이 나오면 그동안 쌓인 cnt를 집어 넣는다. import java.util.*; class Solution { public int[] solution(int[] progresses, int[] speeds) {..
[프로그래머스] 할인 행사 - Java(자바)
·
자바/코딩테스트
문제 이해 할인하는 제품이 1 ~ n 일까지 들어있는 discount가 존재한다. 제품은 하루에 한개씩만 할인해준다. 정현이는 원하는 제품 want와 원하는 제품의 개수가 담긴 number가 존재한다. 해당 제품을 모두 할인 받을 수 있는 날이 n ~ N 까지 몇번 되는지 구하여라 원하는 제품과 개수를 담아서 비교 할수 있게 map을 만들어서 들고 다녔다. 제품의 개수는 10개 고정임으로 discount-10 길이 만큼 index 를 하나씩 올리며 전체 할인이 되는지 구하였다. temp라는 임시 map에 discount[i ~ i+10] 의 제품이 몇번씩 나오는지 넣는다. temp == map 이 똑같다면 원하는 제품을 전부 살수 있다는 뜻으로 하였다. import java.util.*; class So..
[프로그래머스] 괄호 회전하기 - Java(자바)
·
자바/코딩테스트
문제 이해 (),{},[] 세종류의 괄호로 구성된 문자열이 존재하는데 문자열을 회전시켰을때 괄호가 올바른 괄호 문자열이 몇번인지 구하여라 문자열 회전 문제는 "[](){}" + "[](){}" 이런식으로 두개의 문자열을 합하여 index 0부터 문자열 길이만큼 비교하고 index 값을 올려서 반복 비교한다. 괄호의 완성은 "{()}" 이와 같이 괄호를 열었으면 제대로 닫아야 한다. "{(})" 이런 식의 괄호는 열고 닫았지만 닫는 순서가 잘못되었다. 문자열의 값을 스택에 한문자씩 집어넣고 한문자씩 꺼내면서 "()", "{}","[]" 이와 같이 스택의 마지막값이 지금 문자열의 값의 열고 닫는 괄호가 맞는지 비교한다. 스택에서 하나씩 꺼내 완성된 괄호가 모두 존재 하면 스택에는 아무런 값이 미존재 해야한다..
[프로그래머스] 구명보트 - Java(자바)
·
자바/코딩테스트
문제 이해 구명보트는 한번에 최대 2명씩 밖에 못탄다. limit 무게보다 낮으면 2명 높으면 1명씩 타야한다. 무게가 낮은 순서대로 오름차순하기 무게가 낮은 사람을 left 변수, 높은 사람을 right 변수 선언 무게가 제일 낮은 사람과 제일 높은 사람의 합이 limit보다 낮거나 같으면 탈출하였기에 left++, right-- 두 무게의 합이 더 높다면 right-- 로 더 낮은 사람과 매칭을 시켜서 무인도에서 한명씩 나오게 한다. import java.util.*; class Solution { public int solution(int[] people, int limit) { int answer = 0; int left = 0; int right = people.length - 1; Arrays..
[프로그래머스] 영어 끝말잇기 - Java(자바)
·
자바/코딩테스트
문제 이해 n명이 영어 끝말잇기중에 있다. 배열에서 영어 단어를 하나씩 말합니다. 영어 단어의 끝으로 시작되는 단어를 사용하지 않거나, 이전에 사용한 단어를 사용하면 탈락 탈락되는 사람이 없을시 [0,0] 탈락되는 사람이 있다면 해당 단어는 n명의 사람중 몇번째 단어를 말하던 중 탈락인지 구하시오 리스트에 사용한 영어 단어를 하나씩 넣는다. 만약 리스트에 포함된 영어단어를 말하면 탈락 영어 단어를 말할때 마다 앞의 단어의 마지막 문자로 시작하지 않을 경우 탈락 n 의 몇번째 단어인지 구하기 : 사람 인원은 1명 이상임으로 +1 , n으로 나눴을때 나머지가 0이되는 몫이 n번째 사람의 단어 순서이다. 0이 되지 않으면 순서는 n의 몫과 동일한 위치에 있기에 +1을 한다. import java.util.*;..
[프로그래머스] 점프와 순간 이동 - Java(자바)
·
자바/코딩테스트
문제 이해 아이언 슈트는 K 칸 * 2 의 위치까지 순간 이동 가능 순간이동이 아닌 K 칸씩 앞으로 가려면 K 만큼의 건전지가 소모됨 최소한의 건전지 사용량으로 가려면 어떻게 해야하는가? 0에서 시작이 아닌 나는 n에서 0까지 가는 방식으로 선택했다. n 에서 짝수이면 /2 홀수이면 -1 건전지 사용량 +1 의 방식으로 거리가 0이 될때까지 반복한다. import java.util.*; public class Solution { public int solution(int n) { int ans = 0; while(n != 0){ if(n % 2 == 0){ n /= 2; }else{ n -= 1; ans++; } } return ans; } }
[프로그래머스] 카펫 - Java(자바)
·
자바/코딩테스트
문제 이해 카펫의 가로 세로 길이는 brown + yellow의 약수이다. 가로 세로 구하는 이중 for문 생성, 가로 세로의 길이는 brown/2 이하이다. yellow 값은 (i-2)*(j-2) 와 동일해야한다. import java.util.*; class Solution { public int[] solution(int brown, int yellow) { int[] answer = new int[2]; int len = brown + yellow; int ok = 0; for(int i = 1; i
[프로그래머스] 짝지어 제거하기 - Java(자바)
·
자바/코딩테스트
문제 이해 같은 알파벳 소문자가 짝지어 이루어져있으면 그 둘을 제거한다. 제거된 알파벳의 앞뒤로 문자열을 이어 붙인다. 위와 같이 반복하였을때 문자열이 다 제거되면 1 아니면 0 스택을 이용하면 문자열을 스택을 넣기전 이전 스택의 값(peek)를 통해 같은 값이면 pop 없으면 push로 관리 import java.util.*; class Solution { public int solution(String s) { int answer = -1; Stack stack = new Stack(); for(int i = 0; i 0 ? 0 : 1; } }
[프로그래머스] 숫자의 표현 - Java(자바)
·
자바/코딩테스트
문제 이해 자연수 n 표현하는 자연수들의 개수를 구하여라(단 연속된 자연수로) 1 ~ n 까지의 자연수의 연속된 합이 n이 되는 경우를 구한다. 배열에 1 ~ n까지 값을 세팅 1 부터 n까지 값을 더하면서 sum이 n과 같으면 answer++ sum 이 n보다 작으면 sum에서 left인덱스 위치의 값을 빼고 left index를 증가시킨다. sum 이 n보다 크면 sum에서 right인덱스 위치의 값을 더하고 right index를 증가시킨다. 배열을 다 소모하기전까지 반복 class Solution { public int solution(int n) { int answer = 0; int[] numList = new int[n]; for(int i = 0; i n){ sum -= numList[le..
대전집주인
'자바' 카테고리의 글 목록 (3 Page)