728x90
반응형

백준 67

[Baekjoon 2529 / Python / 실버1] 부등호

import sysinput = sys.stdin.readlineN = int(input()) # 부등호 개수boo = list(input().split()) # 부등호 리스트result = []visited = [False] * 10 # depth는 숫자 개수만큼def compare(a, b, op):    if op == '>':        if a b: return False    elif op == ':        if a > b: return False    return True# 깊이, 현재숫자(문자열)def backTracking(depth, num):    # 숫자가 완성되었다면 결과 리스트에 추가    if depth == N + 1:        result.append(num) ..

[Baekjoon 2503 / Python / 실버3] 숫자 야구

import sysimport itertoolsinput = sys.stdin.readline# 질문 횟수N = int(input())# 숫자, 스트라이크, 볼q = []for i in range(N):    q.append(list(map(int, input().split())))num = [i for i in range(1, 10)]numbers = list(itertools.permutations(num, 3))# 결과 저장할 변수result = 0# 생성된 모든 숫자에 대해서 반복for i in numbers:        # 숫자 하나하나에 대해, 모든 질문에 대한 조건 검사    for j in range(len(q)):        strike = 0        ball = 0       ..

[Baekjoon 5427 / Java / 골드4] 불

BFS 문제이다. 불이 1초마다 상하좌우로 1칸씩 퍼지고, 상근이는 1초마다 상하좌우로 1칸씩 이동할 수 있다.건물 끝 4방향의 '.' 빈 공간에 다다르면 탈출에 성공하게 된다. 상근이의 빌딩 탈출에 걸리는 시간을 출력하고, 탈출할 수 없다면 IMPOSSIBLE을 출력하면 된다. import java.io.*;import java.util.*;public class 불_5427 {    static int N; // 테스트 케이스 개수    static int[] dx = {-1, 1, 0, 0};    static int[] dy = {0, 0, -1, 1};    static char[][] tower;    static int[][] visited;    static int w, h;    publ..

Algorithm/BFS 2024.06.08

[Baekjoon 2589 / Java / 골드5] 보물섬

L이 육지고 W가 바다이다.상하좌우 육지로만 이동할 수 있다고 했을 때, 보물지도 내에서 가장 먼 두 육지의 거리를 출력하면 된다.물론 두 육지의 거리는 최단거리여야 한다. import java.io.*;import java.util.*;public class 보물섬_2589 {    // 입력값 저장할 변수, 4방향 탐색할 dx dy 선언    static int N, M;    static char[][] maps;    static int[] dx = {-1, 1, 0, 0};    static int[] dy = {0, 0, -1, 1};    public static void main(String[] args) throws IOException {        BufferedReader br =..

Algorithm/BFS 2024.05.31

[Baekjoon 14650 / Java / 실버2] 걷다보니 신천역 삼 (Small)

문제는 간단하다. 숫자 0, 1, 2만 사용해서 N자리 숫자를 만들고, 그 중에서 3의 배수가 몇 개인지 출력하면 된다.수학적으로 풀면 간단할 거라고 생각했지만 난 백트래킹 방식으로 경우의 수들을 계산하여 풀었다. import java.io.BufferedReader;import java.io.InputStreamReader;public class 걷다보니_신천역_삼_Small_14650 {    static int cnt = 0;    static int N;    public static void main(String[] args) throws Exception{                BufferedReader br = new BufferedReader(new InputStreamReader(S..

[Baekjoon 13717 / Java / 실버5] 포켓몬 GO

N : 포켓몬 종류 개수P : 포켓몬M : P 포켓몬에 대한 총 사탕 개수K : P 포켓몬을 진화시키기 위해 필요한 사탕 개수  포켓몬을 진화시키면 2개의 사탕을 추가로 받게 된다.모든 포켓몬을 총 몇 번 진화시켰는지, 그리고 가장 많이 진화한 포켓몬의 이름을 출력하면 된다. 총 진화횟수를 upgrade 변수에 세고, 각 포켓몬마다의 진화횟수를 count로 세서 가장 많이 진화한 포켓몬 이름을 갱신해 주었다.진화할 때마다 사탕 2개를 받게 되니, 진화 시 "총 사탕 개수 - 필요한 사탕 개수" 를 할 때 2개를 덜 빼주면 된다. import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;// ..

[Baekjoon 7983 / Java / 골드5] 내일 할거야

N은 과제의 개수D는 과제 소요일, T는 과제 마감일이며 D, T 형태로 주어진다. 최대한 과제를 미루고 미루다가 마지막에 한번에 몰아서 하는데, 이 때 첫 과제를 시작하기 전 최대 며칠을 놀 수 있는지를 구하는 문제이다. 먼저 과제 마감일 기준으로 내림차순 정렬을 해줘야 한다. 그리고 day 변수에 가장 긴 마감일을 설정해 둔다. day는 놀 수 있는 날을 저장해둘 변수이며, 반복문이 진행되며 계속해서 갱신된다. 그리고 N번 반복문을 돌리되, day와 e(현재 과제의 마감일)중 더 작은 값에서 s(현재 과제의 소요일)을 뺀다.그 뺀 값을 다시 day에 할당한다. day가 길어도 과제의 마감일이 더 이르다면 마감일에서 s를 빼고,마감일이 길어도 현재 남은 day가 더 짧다면 day에서 s를 뺀다.이걸 반..

Algorithm/Greedy 2024.05.06

[Baekjoon 18429 / Java / 실버3] 근손실

기본 3대중량은 500이다.매일매일 중량은 K 씩 감소한다.매일매일 하나의 운동 키트를 사용하여 중량을 증가시킬 수 있다. 3대중량이 단 하루도 500 미만으로 내려가지 않도록, 운동 키트를 사용하는 순서의 경우의 수를 모두 찾기 결국 중량의 변화는 (K + 키트로 인한 중량 증가량) 이므로, 입력받은 배열에서 미리 K를 빼 주었다.중량 변화가 음수일 경우 500 미만으로 내려가는 것 이므로, 중량 변화량이 N일동안 계속해서 양수인 경우의 수를 찾으면 된다. import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class 근손실_18429 {        // 결과 저장할 변..

[Baekjoon 1026 / Java / 실버4] 보물

두 배열이 있고 배열의 길이는 같다.각 배열 같은 인덱스의 값들을 곱한 값을 전부 더하는데, 그 값을 최소로 만들어야 한다. A 배열은 재배열할 수 있고 B 배열은 재배열할 수 없다.A 배열을 내림차순 정렬한 후, B배열의 최솟값을 찾아 차례대로 곱하여 더해주면 해결할 수 있다. import java.io.*;import java.util.*;public class 보물_1026 {    public static void main(String[] args) throws Exception {                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));        StringTokenizer st;      ..

Algorithm/Greedy 2024.05.03

[Baekjoon 26085 / Java / 실버1] 효구와 호규 (Easy)

배열은 N*M 크기이며 0 또는 1 카드로 가득 차 있다.1 . 특정 카드의 인접한 카드가 같다면, 특정 카드와 인접한 카드를 지울 수 있다. (2개만 지운다)2. 지워진 공간을 이용해 카드를 이동시킬 수 있다.3. 1,2번에 대한 횟수 제한은 없다.위 규칙을 기반으로 배열이 주어지면, 모든 카드를 지울 수 있는지를 출력하는 문제이다. 2번 규칙이 좀 까다롭게 느껴질 수 있는데, 굳이 카드를 이동시키는 로직을 짤 필요가 없다.왜냐하면, 배열에 빈 공간이 2개 있다면 이미 모든 요소를 뒤섞을 수 있기 때문이다.이동 횟수 제한이 없고, 결국 전부 지울 수 있는지만 출력하면 되기 때문에 문제는 간단해진다. 즉, 단 한번이라도 카드가 지워진다면(2개의 카드가 지워지면) 모든 카드는 지워질 수 있는 것이다. im..

Algorithm/Ad-hoc 2024.05.01
728x90
반응형