본문 바로가기

PS831

[ABC301] A - Overall Winner (AtCoder Beginner Contest 301 in Java) 목차 문제 : abc301 - A 필요 알고리즘 구현, 문자열 문제에서 제시된 대로 구현하는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 문자열의 각 문자를 읽는방법을 안다면 풀 수 있다. T와 A가 나온 갯수를 세서 더 많은 쪽의 문자를 출력해주면 된다. 다만 갯수가 동일하다면 최대치에 더 먼저 도달한 문자를 출력해줘야 한다. 이 부분은 코드에서 'c' 변수로 처리했다. 코드 : github import jav.. 2023. 5. 13.
[자바] 백준 1688 - 지민이의 테러 (java) 목차 문제 : boj1688 필요 알고리즘 오목 다각형 내부의 점 판정 딱히 어려운 부분은 아니다. 선분 교차 판정의 응용으로, 풀이를 보면 어떻게 판정하는지 바로 알 수 있다. 기하학, CCW, 선분 교차 판정 CCW를 이용한 선분 교차 판정을 통해 오목 다각형 내부의 점을 판정하는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 우선 CCW와 선분 교차 판정을 모르면 구현이 불가하다. 모른다면 이하 글을 참고해보.. 2023. 5. 12.
[자바] 백준 28017 - 게임을 클리어하자 (java) 목차 문제 : boj28017 필요 알고리즘 다이나믹 프로그래밍 (DP, 동적 계획법) DP로 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 개인적으로 국어문제였다.. '바로 이전 회차의 무기는 사용하지 않기로' 라고 써있는걸 대충 읽고 넘어가서, '이전에 사용한 무기는 사용 않기로'로 해석했다 ㅋㅋ. 덕분에 "와.. 비트 dp도 안되는데 이걸 어떻게 한거지? 최소 3~4 차원 dp는 필요할 것 같은데.. 2023. 5. 12.
[자바] 백준 14254 - 비밀번호 변경 (java) 목차 문제 : boj14254 필요 알고리즘 애드 혹 (ad hoc) 특정한 알고리즘 없이 이 문제를 위한 로직을 찾는 애드혹 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 * 애드혹 문제의 경우 별다른 알고리즘이 필요한 문제가 아니라서, 풀이의 아이디어를 보게되면 그냥 다 푼거나 다름없다. 따라서 정말 열심히 생각해봤는데도 진짜 모르겠고, 그냥 넘어가긴 싫고 너무 억울해서 풀이를 꼭 보고싶다면 풀이를 보자. 예제.. 2023. 5. 11.
[자바] 백준 15558 - 점프 게임 (java) 목차 문제 : boj15558 필요 알고리즘 BFS (너비 우선 탐색) BFS로 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 혹시 BFS에 대해 모른다면 '이 글'을 참고해보자. 최단거리를 찾는게 아닌데 BFS를 사용하는 이유는, '1초에 한 칸씩 각 줄의 첫 칸이 사라진다' 라는 부분에서 초가 결국 거리라고 생각하면 편하게 처리할 수 있기 때문이다. 결국 그냥 동일한 라인의 +1지점, -1지점, 다.. 2023. 5. 10.
[자바] 프로그래머스 - 수열과 구간 쿼리 4 (Lv0, Java) 목차 문제 : Programmers - 수열과 구간 쿼리 4 문제 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges 필요 알고리즘 구현 문제에서 제시된 대로 구현해주면 됩니다. 풀이 문제에서 제시된대로 구현해주면 된다. 별다른 알고리즘 없이 그냥 배열순회만 사용해 풀어도, 총 1000개의 쿼리에 대해 각 O(arr의 길이)만큼 필요하므로, O(1000^2)으로 풀 수 있다. 예를들어 [2, 2, 4, 5, 4]가 query [0, 3, 3]을 통해 [3, 2, 4, 6, 4]로 바뀌는 과정은 아래와 같다. 이하 코드는 약간 효율성을 더하기 위해 인덱스 s부터 e까지 모두 순회하지 않고, 1. s이상이면서 k의 배수인 가장 작은 수를 우선 .. 2023. 5. 10.
[자바] 백준 1790 - 수 이어 쓰기 2 (java) 목차 문제 : boj1790 필요 알고리즘 구현, 수학 수학적 사고를 통해 구현할 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 N이 1억까지이므로, 언어에 따라 실제로 수를 이어봐서 풀 수도 있어 보인다. 실제로 파이썬은 이렇게 풀 수 있음을 확인했다. 자바는 안될 것 같다. 우선 N이 100,000,000인 경우는 제외하고 최대 8자리까지 가능하다고 생각해보자. 그렇다면 자리수가 i개인 숫자는 ix9x.. 2023. 5. 9.
[자바] 백준 22839 - Square Coins (java) 목차 문제 : boj22839 필요 알고리즘 동적 계획법 (DP), 배낭 문제 (냅색) 유명한 DP 유형인 냅색으로 해결할 수 있다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 우선 살펴봐야 할 것이, 입력값의 최대치는 300이고, coin의 최대치는 17x17 이라는 점이다. 그리고 테스트케이스가 여러개 있긴하지만 어차피 300까지 모두 구해두면 각 테스트 케이스는 O(1)로 구할 수 있다. 따라서 1원부터 300원까지.. 2023. 5. 4.
[자바] 백준 27961 - 고양이는 많을수록 좋다 (java) 목차 문제 : boj27961 필요 알고리즘 그리디 0마리 이상 k마리 이하에 안낚이도록 그리디 규칙을 정할 수 있어야 한다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 주의해야하는 점은 복제 마법 부분이다. 0마리 이상 k마리 이하라고 했는데, k마리 복제하지 않는게 이득인 경우가 과연 있을까? 없다(갯수 안넘어가게 조절할 때 빼고). 즉 이 문제는 고양이를 1마리 늘리거나, 2배 늘릴 수 있을 때 최소의 행동을 구하는.. 2023. 4. 19.
[자바] 백준 27960 - 사격 내기 (java) 목차 문제 : boj27960 필요 알고리즘 수학, 2진수 2진수를 떠올렸다면 풀만한 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 과녁의 점수가 2진수의 각 자리수를 뜻하는걸 깨달았다면, 정수 표현방식과 동일하다는걸 떠올릴 수 있다. 즉, Sa, Sb 각각에 대해 어떤 과녁을 맞췄는지 항상 분리해낼 수 있다. 예를들어 7이라는 점수를 표현하려면 뭔가 과녁을 어떻게 조합하면 다양한 경우의 수가 있다고 생각할 수 있.. 2023. 4. 19.