본문 바로가기

공부/예제 풀이

(16)
[프로그래머스] 뒤에있는 큰 수 찾기 //100만개의 원소를 for문을 돌면서 탐색하는건 무조건 시간초과임 //sort도 못함 각 인자의 순서로 해야함. //최악의 경우가 맨 마지막에 가장 큰수가 있을 경우 100만개의 행을 다 비교하면서 돌아야됨 //적합한 자료구조가 있나..? 큐? //어떻게 쓸건데? 큐는 못씀 중간에 껴있는 값들을 비교해야 하는데 그걸 못하니까 //완전 탐색? 그건 필요 없을거 같은데 for문과 다르지 않잖아 //스택 : 원소들을 쌓고 새로 들어온 값이 마지막 원소보다 커? 팝(새로운 원소값으로) 다시 비교해서 커? 팝 //새로운 원소는 다시 스택에 넣고 //그럼 이걸 인덱스 관리를 어떻게 할건데?? 팝할 때 그 인덱스는 어떻게 알지?? //아 인덱스를 넣어준다? 스택에다가??? //스택에 인덱스를 넣어줘 //비교할 땐..
[프로그래머스] 달리기 경주 내가 좋아하는거 두개 다 있넹 ㅎㅎ 달리기와 경주(장군 암소 숯불 영원해..) 사기 map을 써서 풀어야지~ 하고 풀었다가 냅다 시간초과가 떴다. 이유를 생각해보면 players의 길이와 callings의 길이가 굉장히 길다. 이 문제는 시간 복잡도를 잘 설계해라 문제같음. 첫번째 풀이 : map에 key값으로 선수 이름, value값으로 현재 등수를 넣음 calling에서 현재 선수가 불리면? map에서 불린선수의 value값과, 불린선수의 앞 선수의 value값을 서로 바꿔주면 된다 *여기서 시간초과* 내가 아직 map을 다루는게 완벽하지 않은건지 value값으로 key값을 찾는게 어렵다. 이걸 구글링을 해봐도 map에서 직접적으로 메서드를 통해서 안해준다고 함. 따라서 반복문을 새로 돌면서 해당 k..
[프로그래머스] 개인정보 수집 유효기간 아 이거 좀 최적화를 진짜 못시킨 느낌... 첫번째로 각 약관(ABC...)들의 유효기간을 map에 담았다. key는 약관(ABC..) value는 유효기간. 여기서 애먹었던 첫번째 String.split(".") 이게 안먹는다. 정규표현식에서 문제가 있나보다 이걸 String.split("\\.")로 사용하니까 됐다. 두번째 처음 로직을 짤 때 12월일 때 예외처리를 좀 이상하게 했다. 그래서 테스트 케이스에서 실패가 떴음. 처음 어떻게했냐면 month값에 약관에 해당하는 값을 map에서 받아서 더해준다. 이때 %12를 해서 값을 얻어오려고 했음. 그런데 생각해보니 12월일 때 12로 나누면 나머지가 0임. 잉? 뭐야 안되네? 하고 그냥 냅다 %13을 갈김; (부끄러운 수준;;) -> 근데 테스트 케이..
[프로그래머스] 바탕화면 정리 처음 이해하는게 살짝 어려웠지 실제 풀이는 뚝딱 했다. 핵심은 드래그를 할 때 위에, 왼쪽은 그냥 값을 구해주면 되지만? 오른쪽, 아래는 +1을 붙여줘야함. 왜냐하면 좌표계에서 +1을 해줘야 그쪽까지 드레그가 됨. 이문제를 풀면서 썼던 아이디어는 왼쪽과 위에서 구할 때 시작 index는 0부터, 오른쪽과 아래를 구할 때 시작 index는 주어진 좌표계의 최대값으로 시작해서 줄이는 식. ps. 좌표계 이상해서 한 5분 고민했음 왜 세로가 x고 가로가 y임..? 풀이 //발제자 좌표계 다시 배워라.. class Solution { public int[] solution(String[] wallpaper) { int[] answer = new int[4]; int lux=0, luy=9999,rdx=0, rd..
[프로그래머스] 성격 유형 검사하기 사기 자료구조 map을 썼다. key값으로 mbti의 요소를 넣고, value값으로 해당 요소의 점수를 넣어주는 식. 점수를 4점을 기준으로 빼준다. 이때 음수값이라면 map에 해당 지문의 왼쪽 mbti 요소로 넣어준다.(value값은 절대값을 취해야 하므로 -를 붙여줌) 양수라면 해당 지문의 오른쪽 mbti 요소로 넣어줌. 마지막으로 String을 붙여줄 땐 전에 배웠듯이 StringBuilder의 append() 메서드를 사용해줬다. 문자열 출력 방식은 문제에서 주어진 순서로! 풀이 import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; // 맵으로 mbti 한개당 벨류 넣기 // 벨류 넣는 방법 4-choice의 절대값..
[프로그래머스] 햄버거 만들기 첫번째 풀이가 시간초과가 났다. 원인은 반복문 안의 indexOf()는 시간복잡도가 높음! stack 자료구조를 사용해봄. 이 자료구조는 First In Last Out 마지막에 들어온게 가장 먼저 나가는 식. 이 자료구조를 선택한 이유는 순서대로 1231이 들어올때마다 로직이 돌아야 한다. 따라서 마지막에 어떻게 값이 들어오는지가 중요하기 때문에 stack을 사용. 마지막 4개의 값들을 체크해주기만 하면 된다. 풀이 // 첫번째 풀이 방법 : StringBuilder를 이용해 ingredient값을 append() // -> while()문을 이용해 StringBuilder의 indexOf를 이용해 "1231"을 찾음 // -> 있으면 delete(index, index+4)해서 지워줌, answer+..
약수의 갯수 구하기 for(int i=1;i
백준 1475(실패) 문제 다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다. 다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.) 입력 첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다. 출력 첫째 줄에 필요한 세트의 개수를 출력한다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ja..
백준 11650 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Str..
백준 1676 문제 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500) 출력 첫째 줄에 구한 0의 개수를 출력한다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { int number,multifleFive, multifleFiveSqured, multifleFivecubed,count =0; BufferedReader br = new BufferedReade..