반응형
package com.ji.beakjoon;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class LostBracket {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		String calcuFormula = String.valueOf(br.readLine());
		int result = Integer.MAX_VALUE;

		// 마이너스 기준으로 순자 분리
		for (String formula : calcuFormula.split("-")) {
			int temp = 0;

			// 플러스가 포함된 수식의 경우 계산하여 temp에 저장
			for (String plusFormula : formula.split("\\+"))
				temp += Integer.parseInt(plusFormula);

			// 첫번째 숫자로 초기화
			// Q) Integer.MAX_VALUE 로 초기 값을 해야하는 이유????
			// 초기 값을 0으로 하면 temp값과 일치하므로 재귀적으로 돌게됨
			result = (result == Integer.MAX_VALUE) ? temp : result - temp;
		}

		bw.write(String.valueOf(result));

		br.close();
		bw.flush();
		bw.close();
	}

}
728x90

'[개발관련] > 코테준비' 카테고리의 다른 글

[백준] ATM  (0) 2021.06.13
[백준] 쇠막대기  (0) 2021.06.13
[백준] 1로 만들기  (0) 2021.06.13
[백준] 바이러스  (0) 2021.06.13
[프로그래머스] 신규 아이디 추천  (0) 2021.06.13
반응형
package com.ji.beakjoon;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class MakeNumberOne {

	static Integer[] dp;
	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int inputNumber = Integer.valueOf(br.readLine());
		
		dp = new Integer[inputNumber + 1];
		dp[0] = dp[1] = 0;
		
		int result = recur(inputNumber);
		
		bw.write(String.valueOf(result));

		br.close();
		bw.flush();
		bw.close();

	}

	public static int recur(int N) {
		 
		if (dp[N] == null) {
			// 6으로 나눠지는 경우 
			if (N % 6 == 0) {
				dp[N] = Math.min(recur(N - 1), Math.min(recur(N / 3), recur(N / 2))) + 1;
			}
			// 3으로만 나눠지는 경우 
			else if (N % 3 == 0) {
				dp[N] = Math.min(recur(N / 3), recur(N - 1)) + 1;
			}
			// 2로만 나눠지는 경우 
			else if (N % 2 == 0) {
				dp[N] = Math.min(recur(N / 2), recur(N - 1)) + 1;
			}
			// 2와 3으로 나누어지지 않는 경우
			else {
				dp[N] = recur(N - 1) + 1;
			}
		}
		
		return dp[N];
	}
	

	static int recur2(int N, int count) {
		// N이 2 미만인 경우 누적된 count값을 반환
		if (N < 2) {
			return count;
		}
		return Math.min(recur2(N / 2, count + 1 + (N % 2)), recur2(N / 3, count + 1 + (N % 3)));
 
	}

}
728x90

'[개발관련] > 코테준비' 카테고리의 다른 글

[백준] 쇠막대기  (0) 2021.06.13
[백준] 잃어버린 괄호  (0) 2021.06.13
[백준] 바이러스  (0) 2021.06.13
[프로그래머스] 신규 아이디 추천  (0) 2021.06.13
[프로그래머스] [1차] 캐시  (0) 2021.06.13
반응형
package com.ji.beakjoon;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

public class Virus {

	static int computerCnt, connectPairCnt;
	static int[][] graph;
	static boolean[] DFSisVisited;
	static List<Integer> DFSvisitArr;

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		computerCnt = Integer.parseInt(br.readLine());// 노드 갯수
		connectPairCnt = Integer.parseInt(br.readLine()); // 간선 갯수
		graph = new int[computerCnt + 1][computerCnt + 1];
		DFSisVisited = new boolean[computerCnt + 1]; //방문 정보 초기화

		DFSvisitArr = new ArrayList<Integer>();

		for (int i = 0; i < connectPairCnt; i++) {
			String[] comPairNum = String.valueOf(br.readLine()).split(" ");
			int a = Integer.parseInt(comPairNum[0]);
			int b = Integer.parseInt(comPairNum[1]);
			graph[a][b] = 1;
			graph[b][a] = 1;
		}

		for (int i = 0; i < computerCnt + 1; i++) {
			DFSisVisited[i] = false;
		}

		dfs(1);

		Integer result = DFSvisitArr.size() - 1;
		bw.write(String.valueOf(result));

		br.close();
		bw.flush();
		bw.close();

	}

	static void dfs(int nodeNum) {
		// 방문한 노드 번호에 대한 boolean 처리
		DFSisVisited[nodeNum] = true;
		// 방문한 순서에 대한 노드 정보 리스트 저장
		DFSvisitArr.add(nodeNum);
		for (int i = 1; i <= computerCnt; i++) {
			if (graph[nodeNum][i] == 1 && DFSisVisited[i] == false) {
				dfs(i);
			}
		}
	}

}
728x90

'[개발관련] > 코테준비' 카테고리의 다른 글

[백준] 잃어버린 괄호  (0) 2021.06.13
[백준] 1로 만들기  (0) 2021.06.13
[프로그래머스] 신규 아이디 추천  (0) 2021.06.13
[프로그래머스] [1차] 캐시  (0) 2021.06.13
동적계획법(Dynamic Programming)  (0) 2021.06.13

+ Recent posts