[프로그래머스] PS 65

[백준 1501] 영어 읽기 - JAVA

https://www.acmicpc.net/problem/1501 같은 단어려면1. 0번째와 len-1번째 알파벳이 같음2. 사용된 알파벳 개수가 같음 판별하려면 1번을 Pos 클래스로 놓음2번을 알파벳별로 카운팅 하는 대신 정렬해서 key로 씀 Map> 사용 이후 M개의 문장을 공백기준으로 파싱하고, 각각 정렬해서 key로 씀map에 key가 있으면 Pos List 비교해서 정답 누적후 출력 import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import jav..

[백준 1277] 발전소 설치 - JAVA

https://www.acmicpc.net/problem/1277 1번째 노드 -> N 번째 노드 (발전소) 의 최단경로(전선 길이)를 구하는 다익스트라 문제 모호한 조건, 조건을 무시해야 ac인 기이함, BFS로 비비기 시도가 겹쳐서 한 페이지 다 채울정도로 틀렸다.https://www.acmicpc.net/board/view/156457  "연결된 발전소"의 처리가 중요하다. 연결된 발전소란, 현재 발전소에서 전선 길이 0으로 도달할 수 있으며, x/y좌표 값이 바뀜을 의미한다.  두 가지 탐색을 진행한다. 1. "연결된 발전소"에 대해 비용 갱신이 발생한다면, (현재 값)을 기록하고 pq에 넣는다.2. "자신이 아닌 모든 발전소"에 대해 비용 갱신이 발생한다면, (현재 값 + 필요한 전선 길이)을 ..

[lv2] 예상 대진표

https://school.programmers.co.kr/learn/courses/30/lessons/12985?language=java 참가자 N은 항상 짝수로 주어지므로 부전승인 경우는 없다.A와 B가 만나지 않는 경우도 없다. import java.util.*;class Solution{ public int solution(int n, int a, int b) { int answer = 1; int A = Math.min(a, b); int B = Math.max(a, b); while(true) { if(B - A == 1 && A % 2 == 1) return answer; answer++; A = (int) Math.ceil((..

[lv2] 단체사진 찍기

https://school.programmers.co.kr/learn/courses/30/lessons/1835# 구현 문제 문제에서 조합으로 8명의 친구들을 뽑는 경우의 수는 8! = 40320이므로,조합으로 일단 뽑고 100개의 조건을 모든 조합에 대해 판별해도 시간이 널널하다. 특이 사항전역변수로 answer을 선언하면, solution 메서드 스코프에서 answer  변수 초기화를 해줘야한다. 아니면 오답을 받는다.(프그스 풀면서 처음 보는 패턴이었다;;)https://school.programmers.co.kr/questions/13442 class Solution { static int answer, F = 8, D; static char[] pick = new char[F], frd = ..

[lv4] 도둑질

https://school.programmers.co.kr/learn/courses/30/lessons/42897 시간 제한 빡빡한 원형 DP 문제다.  풀이 1. 원형 DP (0번째 집을 훔쳤으면, M-1번째 집을 훔칠 수 없음)=> 배열 idx를 0 ~ M-2, 1 ~ M-1 까지 고려하는 경우로 나누어 DP를 2번 수행한다. 2. DP기록 dp[i][0], dp[i][1]을 각각 i번째 집을 안훔치는/훔치는 경우로 두었는데, 이것만으로도 시간 초과가 난다.=> 배열 대신에 변수에 기록하고, swap하며 탐색한다.   시간 초과 코드더보기// 시간 초과 1. 2차원 DP 배열 2개 + money 배열 2개 사용 import java.util.*; class Solution {     public in..

[lv3] 표현 가능한 이진트리

https://school.programmers.co.kr/learn/courses/30/lessons/150367#   1. 입력 전처리 {1,3,7,15,31,63}는 각각 높이가 1 ~ 6인 포화 이진 트리의 노드 개수이다. 주어진 입력을 2진법으로 변환했을 때, 비트(= 노드)개수가 모자라다면 그만큼 앞에 0(= 더미 노드)을 채워준다. 이는 포화 이진 트리를 만드는 과정이다. e.g.)2 -> 01(2) -> 001(2)  2. 가능한 해인지 판별 true인 조건은 다음과 같다. (0 : 더미 노드, 1 : 더미가 아닌 노드) - 루트 노드는 반드시 1이어야 한다.- 자식 노드가 0이라면, 부모 노드는 0 or 1이어야 한다.- 자식 노드가 1이라면, 부모 노드는 1이어야 한다. 재귀를 통해, ..