[백준] 1043 - 거짓말(Java)
·
Algorithm
문제 파악진실을 아는 자들이 진실을 퍼트린다고 생각하면 좋다.진실이 다 퍼졌을 때에도 진실을 아는 이가 없는 파티가 있다면, 그 파티에서 지민이는 거짓말을 할 수 있다.풀이큐를 사용하여 풀었으며, 풀이 순서는 다음과 같다.입력으로 주어지는 진실을 아는 사람들을 큐에 넣어준다.큐에서 사람들을 꺼내며, 진실을 아는 사람임을 체크해 준다.진실을 아는 사람들이 참가한 파티를 역추적한다.진실을 아는 사람들이 참가한 파티는 지민이가 거짓말을 할 수 없으므로 답에서 제외한다.해당 파티에 참가한 참석자들을 큐에 다시 넣어준다.이 때, 이미 진실을 아는 사람은 큐에 추가할 필요가 없다. (단계 2에서 체크 했으므로)그렇게 되면 무한으로 사람들을 추가하게 될 것코드import java.io.BufferedReader;im..
[백준] 1099 - 알 수 없는 문장(Java)
·
Algorithm
문제 파악https://www.acmicpc.net/problem/1099지문 파악이 어려웠음 흑흑 예시를 참고하여 파악했다 🥹 지문에서는 `문장`을 기준으로 설명하는 반면, `단어` 기준으로 이해하는 것이 내 기준에서는 더 쉬웠다.내 방식으로 정리해 보았다.문장은 주어진 단어 리스트의 단어들로 빠짐없이 구성된다.단어들의 순서를 바꾸는데는 비용이 든다. (ex. ABC -> CBA 변환 시 2번 비용이 발생)이 때 해당 비용이 가장 적게 드는 값을 출력하도록 한다.만일 주어진 단어로 문장을 온전히 구성하지 못하면, -1을 출력한다.단어 리스트의 단어들은 각각 1번 이상 사용 할 수도 있고, 사용하지 않을 수도 있다헷갈렸던 예시 두 개를 적용하며 파악해 보자.[] 내의 입력은 문장이고, 그 이후의 문자..
[백준] 1052 - 물병(Java)
·
Algorithm
문제 파악https://www.acmicpc.net/problem/1052 어려운 점정답이 없는 경우 -1을 리턴해야 하는데 이 부분을 신경 쓰느라 규칙을 잡는 중요한 부분을 놓친 게 아닌가 싶다.... 사실 -1이 나올 일이 없다 😅풀이주어진 수들을 2진수로 변환하여 풀도록 한다.높이가 1인 컵을 한 개씩 추가할 때 기존 물컵들이 결합하여 변화하는 양상은 이진수의 연산과 닮아있다.이진수로 변환하게 되면 각 자리수의 1은 차 있는 물컵을 나타낸다 예를 들어 높이가 1인 컵의 개수가 5일 경우에 대해 규칙을 알아보도록 하자5 = 101(2) 즉 2개의 컵이 남는다. (높이가 1인 컵 1개, 4인 컵 1개가 남는 형태)현 상태에서 1인 물컵을 더하게 되면 6 = 110(2)로 바뀐다.(높이가 1인 컵 두..
[백준] 1041 - 주사위(Java)
·
Algorithm
문제 파악https://www.acmicpc.net/problem/1041어려운 점주사위의 합을 구하는 규칙이 분명 존재할 것 같은데 생각보다 경우의 수가 적을 것 같아 직접 배열에 선언하는 단순한 방식을 사용했다.이 배열을 만들어주는 게 오히려 어려웠다... 😅풀이한 면, 두 면, 세 면이 보이는 3개의 경우로 나뉜다.하나의 주사위 배치가 다른 주사위에 영향을 미치지 않기 때문에 독립적이라고 볼 수 있겠다.세 경우에서 가장 적은 합을 구해 각 면이 발생하는 개수를 곱해 주면 원하는 값을 구할 수 있다.먼저 각 경우의 발생 개수를 구해보자면한 면 : (N-2) ^ 2 + (N-1)(N-2)*4두 면 : (N-2) * 8 + 4세 면 : 4이 되겠다. 바닥 부분 때문에 개수에 영향이 감에 유의하도록 하..
[프로그래머스] 12904 - 가장 긴 팰린드롬 (Java)
·
Algorithm
https://school.programmers.co.kr/learn/courses/30/lessons/12904문제 파악어려운 점타임아웃을 해결하기 위해 노력했다 😅문자열을 순회하며 주어진 문자열의 펠린드롭 여부를 모두 조사하게 되면... 🔥Timeout🔥펠린드롭인지 조사할 때 최적화를 덜 해서 그런지 모르겠지만,substring을 통해 문자열을 추출하고, 아래와 같이 구현하면 채점 시 시간이 초과된다. for (int from = 0; from boolean isPalindrome(String s) { int len = s.length(); if (len == 1) { return true; } for (int i = 0; i   위 구현 방법 대신 이차원 배열..
[프로그래머스] 161988 - 연속 펄스 부분
·
Algorithm
https://school.programmers.co.kr/learn/courses/30/lessons/161988문제 파악어려운 점변수 type 신경쓰기 (int, long)DP 의미(?) 유지하기DP를 업데이트 해 나가면서 이것 저것 덧붙이려는 자신을 볼 수 있다.일관성을 유지하도록 하자풀이2차원 DP(int[][] DP)로 해결DP에서의 더해주고 빼는 행위를 0번째 열, 1번째 열에 저장하여 구현하면 편할 듯 했다.[구현 순서]초항 초기화(N-1번째 값)N-1번째 부터 0번째에서 순서대로 memorization을 진행 DP[i] 데이터를 업데이트하는 방법은 다음과 같다.주어진 수(sequence[i])에 -를 곱하는 경우(=펄스 부분 수열에서 -1)를 DP[i][0]에 업데이트주어진 수(seque..