def solution(n, tops): answer = 0 div = 10007 # 우하단 마름모를 제외한 경우의 수 배열 a = [0] * (n + 1) # 우하단 마름모만을 포함하는 경우의 수 배열 b = [0] * (n + 1) a[0] = 1 for i in range(0, n): # 현재 순회 중 top 존재 시 발생 경우의 수 확인 if (tops[i] == 1): a[i + 1] = a[i] * 3 + b[i] * 2 else: a[i + 1] = a[i] * 2 + b[i] * 1 # 현재 정삼각형에서 우하단 마름모인 경우는 앞선 경우의 수와 무관 b[i + 1] = a[i] + b[i] a[i + 1] = a[i + 1] % div; b[i + 1] = b[i + 1] % div; re..
전체 글
말보다는 실천하는 사람from collections import defaultdict def solution(edges): answer = [0, 0, 0, 0] graph = defaultdict(lambda: [0, 0]) for s, e in edges: graph[s][1] += 1 graph[e][0] += 1 for items in graph.items(): node, num = items if num[0] == 0 and num[1] >= 2: answer[0] = node elif num[0] >= 2 and num[1] >= 2: answer[3] += 1 elif num[0] > 0 and num[1] == 0: answer[2] += 1 # 시작정점에서 뻗어나간 간선의 개수 = 총 그래프 개수 donut ..
def solution(h1, m1, s1, h2, m2, s2): answer = 0 s_total = getTotalTime(h1, m1, s1) e_total = getTotalTime(h2, m2, s2) if (s_total == 0 or s_total == 12 * 3600): answer += 1 for time in range(s_total, e_total): # 현재 위치 s_sec = time * 6 % 360 s_min = time * (6 / 60) % 360 s_hour = time * (30 / 3600) % 360 # 1초 뒤 위치 e_sec = (time + 1) * 6 % 360 e_min = (time + 1) * (6 / 60) % 360 e_hour = (time + ..
import java.util.*; class Solution { class Node implements Comparable { int index; int cost; Node(int index, int cost) { this.index = index; this.cost = cost; } @Override public int compareTo(Node o) { return Integer.compare(this.cost, o.cost); } } List[] graph; public int[] solution(int n, int[][] paths, int[] gates, int[] summits) { graph = new ArrayList[n + 1]; for (int i = 0; i < n + 1; i++)..
import java.util.*; class Solution { int[][] a_land; public int solution(int[][] land) { int answer = 0; boolean[][] isVisited = new boolean[land.length][land[0].length]; // 발견된 석유지역 list List finds = new ArrayList(); for (int i = 0; i 0 && !isVisited[i][j]) { Place place = process(i, j, land, isVisited, new Place(..
class Solution { public int solution(int n, int[][] results) { int answer = 0; boolean[][] graph = new boolean[n][n]; // graph 인접배열 형태 초기화 for (int[] result : results) { int win = result[0] - 1; int lose = result[1] - 1; graph[win][lose] = true; } int count = 0; for (int p = 0; p < n; p++) { // node별로 앞뒤로 이어진 edge체크 int lose = countBehind(p, graph, new boolean[n]) - 1; int win = countFront(p, gr..
import java.util.*; class Solution { List list = new ArrayList(); List keywords = List.of("A", "E", "I", "O", "U"); boolean isFind = false; int count = 0; public int solution(String word) { int answer = 0; getCombi("", 0, word); return count; } void getCombi(String output, int depth, String target) { // 탐색완료 이후 모든 재귀함수 미실행 if (isFind) { return; } if (!output.isEmpty()) { count++; } // 단어를 찾으면 is..
import java.util.*; class Solution { public int solution(int alp, int cop, int[][] problems) { int answer = 0; int al_max = Arrays.stream(problems) .map(problem -> problem[0]) .max(Comparator.naturalOrder()).orElseThrow(); int co_max = Arrays.stream(problems) .map(problem -> problem[1]) .max(Comparator.naturalOrder()).orElseThrow(); // 이미 모든 문제를 풀 수 있는 경우 0 반환 if (alp >= al_max && cop >= co_max)..