[프로그래머스] 방문 길이 - Java(자바)
·
자바/코딩테스트
문제 이해 좌표문제로 좌표 범위는 -5 ~ 5까지로 해당 범위를 나가면 안된다. 문자열은 상하좌우를 뜻하는 LRUD가 있다. 문제의 핵심은 좌표범위를 벗어나지 않고 처음가는 길인곳의 길이를 구하는것이다. A -> B == B -> A 두개의 길은 같은길로 처리한다. 리스트에 좌표를 움직이기 전 좌표 + 움직인 후 좌표, 움직인 후 좌표 + 움직이기 전 좌표 로 두가지 경우를 둘다 넣어 문자열로 담아놨다. indexOf를 사용하여 리스트에 존재 하지 않으면 처음 가는길로 간주했다. import java.util.*; class Solution { public int solution(String dirs) { List visit = new ArrayList(); int answer = 0; int[] poi..
[프로그래머스] [3차] 압축 - Java(자바)
·
자바/코딩테스트
문제 이해 A - Z 까지 대문자 사전이 1 ~ 26까지 색인번호를 가지고 있다. 문자열에서 첫글자 다음글자를 자르고 사전과 비교하였을때 사전에 미존재하면 색인번호를 올려서 새로 추가한다. 사전에 없는 문자가 나올때까지 계속 자른다. 문자열은 1000글자 이하로 이중for문을 사용하였다. map에다 A-Z를 키로 색인번호를 value로 생성, 추가되는 사전단어가 나올때마다 색인번호를 올려서 추가 색인번호가 신규 추가가 되면 기존에 사용한 영문자는 사용하면 안된다. cnt에 사용한 영문자의 수를 체크하여 사용못하게 넘어간다. 영문자 tmp 가 msg의 마지막 영문자를 사용하고 해당 문자열이 키에 존재한다면 문자열의 색인번호를 집어넣고 for문을 끝낸다. import java.util.*; class Sol..
[프로그래머스] k진수에서 소수 개수 구하기 - Java(자바)
·
자바/코딩테스트
문제 이해 정수 n을 k진수로 변환시켜야 한다. n은 1,000,000 으로 int형으로 처리 불가 long 타입으로 변환처리 해야한다. String 변수 temp에 k진수로 바꾸어서 만든다. 0이 앞뒤로 존재하면 소수인지 체크해야함으로 split("0") 으로 배열 생성 0000 0이 연속으로 나오면 배열에 "" 공백이 들어감으로 공백체크 필수 소수 판단하는 함수에도 long타입으로 변경후 소수 판단 class Solution { public int solution(long n, int k) { int answer = 0; String temp = ""; while(n > 0){ temp = Long.toString(n%k) + temp; n /= k; } String[] num = temp.split..
[프로그래머스] [1차]뉴스 클러스터링 - Java(자바)
·
자바/코딩테스트
문제 이해 자카드 유사도를 구하고 65536을 곱한 수를 출력해라 자카드 유사도는 두 배열의 교집합/합집합이다. 문자열을 2글자씩 잘라서 넣는데 영문이 아니라면 그 문자는 삭제한다. 교집합을 구할때는 두 배열을 비교하면서 사용한 index인지 check를 통해 확인후 교집합의 개수를 구한다. double 형태로 자카드 유사도가 나오기 때문에 cnt + 0.0을 함으로 형 변환후 자카드 유사도를 구한다. import java.util.*; class Solution { public int solution(String str1, String str2) { int answer = 0; str1 = str1.toUpperCase(); str2 = str2.toUpperCase(); List str1List = ..
[프로그래머스] 피로도 - 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.*;..
대전집주인
'코딩테스트' 태그의 글 목록 (2 Page)