알고리즘/문제풀이 79

[구현] 줄기세포배양

5653. [모의 SW 역량테스트] 줄기세포배양 https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRJ8EKe48DFAUo&categoryId=AWXRJ8EKe48DFAUo&categoryType=CODE *조건이 많아서 차분하게 풀어야함. *매번 전체 맵 다 확인하도록 무식하게 만들었는데, 이정도로 통과가 되지만 효율성&구조 개선시킬 부분이 있음-전체 맵 크기 최적화-매번 전체 맵을 스캔하지 않고 필요한 부분(활성화, 비활성화, 검토)만 메모해 두었다가 해당지역만 검색 *나중에 시간나면? 개선된 방법으로 수정 package com.company; import java.util.Scanner; public..

[Hash] 완주하지 못한 선수

import java.util.*; class Solution { public String solution(String[] participant, String[] completion) { Map map = new HashMap(); //참가자를 HashMap에 입력 for(String name : participant){ if( map.get(name) == null ){ map.put(name, 1); }else{ int value = map.get(name) + 1; map.put(name, value); } } //완주자는 value를 1씩 감소 for(String name : completion){ int value = map.get(name) - 1; map.put(name, value); } ..

[BFS] 미로탐색

2178. 미로 탐색 성공시간 제한메모리 제한제출정답맞은 사람정답 비율2 초128 MB3835212107754830.979%문제N×M크기의 배열로 표현되는 미로가 있다.101111101010101011111011미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오.위의 예에서는 15칸을 지나야 (N, M)의 위치로 이동할 수 있다. 칸을 셀 때에는 시작 위치와 도착 위치도 포함한다.입력첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로..

진수의 홀수 약수

5213. 진수의 홀수 약수https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWT-hF8KdBADFAVT 범위가 1,000,000이라 그냥 구하면 시간초과. [1]미리 홀수약수의 합을 memo[]에 구해놓는다. 배수를 이용한다. [2]미리 홀수약수 합들을 구해놔도 범위를 많이주면 찾는데 오래걸린다.부분합을 미리 구해놓는다.검색해보니 인덱스트리를 이용하는 방법도 있던데, 그냥 부분합만 구해도 통과된다. package com.company; import java.util.Scanner; public class Main { static Scanner sc = new Scanner(System.in); static ..

[DP] 1로 만들기

https://www.acmicpc.net/problem/1463 1로 만들기 성공시간 제한메모리 제한제출정답맞은 사람정답 비율2 초128 MB50295163311061132.185%문제정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.X가 3으로 나누어 떨어지면, 3으로 나눈다.X가 2로 나누어 떨어지면, 2로 나눈다.1을 뺀다.정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.입력첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 자연수 N이 주어진다.출력첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.예제 입력 1 복사2 예제 출력 1 복사1 예제 입력 2 복사10 예제 출력 2 복사3 힌트10의 경우에 ..

DFS(깊이우선탐색) 알고리즘

dfs()는 스텍을 사용하여 구현한 함수dfs_rec()는 재귀를 사용하여 구현한 함수 검색했을 때 개념은 스텍으로 설명했지만 막상 스텍으로 구현한 소스는 거의 없었는데, dfs의 경우는 재귀가 훨씬 간단해서 그런 것 같음. package com.company; import java.util.Scanner; import java.util.Stack; public class Main { static int[][] graph = new int[1001][1001]; static boolean[] visitied = new boolean[1001]; //노드의 방문여부 static int N, E, startPoint; public static void main(String[] args) { // write ..