본문 바로가기

Learning-log/Algorithm 문풀53

(Java)백준 Queen 9663.N-Queen 1. 문제 조건 - 퀸은 가로, 세로, 대각 모든 방향으로 이동 가능 - N*N 체스판에 총 N개의 퀸을 놓아야 하는데 이 때 퀸들이 서로 공격이 불가해야 함. 2. 아이디어 - 2차원 배열[N][N]의 각 행을 돌며 퀸을 놓을 수 있는 지 체크(이전에 퀸을 놓은 위치마다 가로,세로,대각을 색칠하여 구분하기) - 퀸을 놓을 수 있다면 퀸을 놓고 다음 행의 놓을 자리 찾으러 가기(재귀 활용) - 퀸을 놓을 수 없다면 for문에서 continue; 3. 구현 - 처음에 퀸을 놓을 수 있는지 여부를 체크하기 위해 boolean을 활용해서 true(해당 자리에 퀸 오면 안됨)로 바꾸고 해당 재귀 함수가 끝나면 다시 false(해당 자리에 퀸 와도 됨)로 바꾸는 방식으로 접근했다. 그랬더니, 어떤 자리는 해당 함.. 2023. 3. 23.
백준(Java) - 2304 창고다각형 1. 문제 조건 - 입력 기둥 수 N ( 1이상 1000이하) 각 기둥의 왼쪽 면의 위치를 나타내는 정수 L & 높이 H - 문제 설명 주어진 막대기둥을 포함하는 다각형의 가장 작은 면적을 구해야 한다. 창고다각형은 아래 조건을 충족시켜야 한다. 2. 아이디어 3. 구현 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws NumberFormatException, IOExce.. 2023. 3. 20.
(Java) SWEA 7964. 부먹왕국의 차원관문 알고리즘 스터디에서 푼 지는 꽤 됐지만 알고리즘과 백엔드 공부에 정신없이 치여 살다가 이제야 기록하는 문제풀이 ..! 오늘부터 1일 최소 1문제풀이 글 작성 꼭꼭 하자 :) 1. 문제 조건 분석하기 - 입력 테스트 케이스 수 T N : N개의 부먹왕국 도시수 / D: 이동제한 거리 각 도시에 차원관문이 남아있는지를 표현하는 수(1은 연결, 0은 파괴) - 문제 설명 부먹왕국 도시들이 이동제한 거리 내에서 관문에서 다른 관문으로 이동 가능하며, 모든 도시들이 이동 가능하도록 관문을 얼마나 추가로 설치해야 하는지를 계산해야 한다. ** 주의 ** 모든 차원 관문 사이와 직접적으로 이동 가능하도록 해야한다는 조건이 있음을 주의해야 한다. 예를 들어 D=1 일 때는, 모든 도시에 관문이 설치되어야 관문에서 관문.. 2023. 3. 20.
(Java) SWEA 1860. 진기의 최고급 붕어빵 풀이(2023-02-24) 1. 문제 조건 분석하기 진기가 M초마다 K개씩 만드는 붕어빵을 N명에게 판매. N명은 입력된 숫자의 시간에 도착하며 기다리지 않고 받아갈 수 있다면 Possible, 불가능하면 Impossible 출력할 것. 2. 아이디어 1) 카운팅 배열을 만든 후 사람이 들어오는 시간을 index로 하여 max시간까지 만든 붕어빵을 값으로 더한다. 그리고 누적합 시킨다. 그 후, 입력값을 돌며 해당 시간에 들어온 사람만큼 붕어빵을 빼준다.( 이 때, 배열에서 끝까지 빼주지 않으면 앞에서 사간 붕어빵이 그 시간 이후에 반영되지 않으므로 주의해야 한다.) => 사람이 들어온 시간을 정렬시켜 시간 순으로 빼주고 뺄 때마다 붕어빵 개수가 0보다 작아졌는지 확인후 작아졌으면 Impossible을 다 돌고도 문제가 없었으면 .. 2023. 2. 26.
백준(파이썬, python) - 2581번 소수 (2022.11.07) 1) 문제 2) 풀이 import sys M = int(sys.stdin.readline()) N = int(sys.stdin.readline()) numbers = list(map(int,range(M,N+1))) prime_num = [] for i in numbers: if i > 1 test = 0 for j in range(2,i): if i%j == 0: test += 1 if test == 0: prime_num.append(i) sum = 0 for i in prime_num: sum += i if len(prime_num) ==0: print(-1) else: print(sum) print(min(prime_num)) 3) 문법 및 풀이과정 앞서 풀었던 소수 찾기 풀이를 조금만 응용하면 .. 2022. 11. 7.
백준(파이썬, python) - 1978번 소수 찾기 (2022.11.07) 1) 문제 2) 풀이 import sys T = int(sys.stdin.readline()) numbers = list(map(int,sys.stdin.readline().split())) count = 0 for i in numbers: if i ==2: count+=1 elif i == 1: count +=0 else: test = 0 for j in range(2,i): if i%j == 0: test += 1 if test == 0: count += 1 print(count) 3) 문법 및 풀이과정 소수란, 1과 자기 자신을 제외한 다른 수로 나누어지지 않는 수를 의미한다. 에라토스테네스의 체를 활용할 수도 있지만 이 문제의 경우 입력값의 범위가 100이하로 그렇게 크지 않고, 시간제한도 넉넉하.. 2022. 11. 7.