[백준] 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..
[프로그래머스] 340212 - 퍼즐 게임 챌린지
·
Algorithm
https://school.programmers.co.kr/learn/courses/30/lessons/340212 문제 파악문제 자체는 이해가 어렵지 않았다. 최초(=최소)로 퍼즐을 다 풀 수 있는 숙련도를 찾도록 하자.아래 조건을 잘 이해하면 구현은 어렵지 않았다.- diff ≤ level이면 퍼즐을 틀리지 않고 time_cur만큼의 시간을 사용하여 해결합니다.- diff > level이면, 퍼즐을 총 diff - level번 틀립니다. 퍼즐을 틀릴 때마다, time_cur만큼의 시간을 사용하며, 추가로 time_prev만큼의 시간을 사용해 이전 퍼즐을 다시 풀고 와야 합니다. 이전 퍼즐을 다시 풀 때는 이전 퍼즐의 난이도에 상관없이 틀리지 않습니다. diff - level번 틀린 이후에 다시 퍼즐을..
[프로그래머스] 12952 - N-Queen
·
Algorithm
https://school.programmers.co.kr/learn/courses/30/lessons/12952 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 파악N * N의 체스판에서 N개의 퀸을 놓을 수 있는 경우의 수를 리턴 어려운 점시간 초과가 나지 않게 구현하도록 하자.재귀로 구현하게 될 것 같은데 시간 복잡도가 높아지지 않는 방법을 생각해 내기가 어려웠다. 풀이int 배열을 생성하여index -> columnindex애 해당하는 값 -> row로 지정하여 구현하면 일차원 배열로도 구현 가능하다.n개의 퀸을 필수적으로 놓아야 하므로,colu..