Stay Hungry Stay Foolish

BOJ 코딩테스트 184

[BOJ] 1303. 전쟁 - 전투 (Python/그래프탐색/Silver 1)

[문제 링크] 👉 https://www.acmicpc.net/problem/1303풀이 방법💡 DFS, BFS 이용 📌 주의할 점가로, 세로 확인하가Solutionfrom collections import dequedx = [1, 0, -1, 0]dy = [0, -1, 0, 1]N, M = map(int, input().split())war = [input().strip() for _ in range(M)]visited = [[0] * N for _ in range(M)]W, B = 0, 0def dfs(i, j, color): cnt = 1 visited[i][j] = 1 queue = deque() queue.append((i, j)) while queue: ..

[BOJ] 2460. 지능형 기차 2 (Python/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/2460풀이 방법내릴 때는 빼고, 탈 때는 더한다.그리고 연산 결과를 max() 함수를 통해 최댓값을 갱신한다. 최댓값 갱신result = max(result, max_on) Solutionget_off, get_on = [], []for _ in range(10): off, on = map(int, input().split()) get_off.append(off) get_on.append(on)result, max_on = 0, 0for off, on in zip(get_off, get_on): max_on -= off max_on += on result = max(result, max_on)p..

[BOJ] 3460. 이진수 (Python/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/3460풀이 방법1️⃣ 이진수 변환format(int(input()), 'b')변환 결과 타입은 정수형이 아닌 str 이다.2️⃣ 뒤집기문자열[::-1]슬라이싱을 이용해 전체를 한번에 뒤집는다. [[파이썬] 이진법, 이진수, 2진수 변환 방법] 🔗 https://dev-cloud.tistory.com/416SolutionT = int(input()) # 테스트 케이스 수for test_case in range(1, T + 1): n = format(int(input()), 'b')[::-1] # 양의 정수 n -> 이진수 변환 -> 뒤집기 result = [] # 결과를 담을 리스트 for i in ..

[BOJ] 2501. 약수 구하기 (Python/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/2501풀이 방법약수 구하기N의 약수를 모두 찾기 위해 1부터 N의 제곱근 까지의 수 i를 확인한다.만약 i가 N의 약수라면 i 와 N / i 를 약수 리스트에 추가한다. 이때, i와 N / i 가 같지 않으면 중복을 피하기 위해 둘 다 추가한다.예를 들어 N이 36일 때, 약수로 6이 두 번 나올 수 있기 때문이다.정렬약수를 모두 찾은 후, 작은 순서로 정렬하여 K번째 작은 약수를 찾는다.출력약수의 개수가 K 보다 크거나 같다면, 정렬된 리스트에서 K 번째 약수를 출력한다.약수의 개수가 K 보다 적다면 0을 출력한다.✔️ 정렬 방법sorted(divisor)리스트 혹은 문자열 등을 내장함수로 이용해 정렬할 수 있다.sort()..

[BOJ] 5212. 지구 온난화 (Python/구현/Silver 2)

[문제 링크] 👉https://www.acmicpc.net/problem/5212 풀이 방법 이 문제는 주어진 지도를 미래의 상태로 변형하고, 불필요한 바다 부분을 제거해 가장 외곽의 땅만 출력하는 문제이다. 1️⃣ 초기값 설정dx = [1, 0, -1, 0] # x(행) dy = [0, -1, 0, 1] # y(열) future_map = [["."]*C for _ in range(R)] # 미래 지도 생성지도를 순회하면서 각 X(땅) 주위에 바다가 3칸 있으면 땅이 잠기도록 한다.새로운 미래 지도를 future_map 이라고 하고, 모두 "." (바다)가 담긴 2차원 배열에 생성한다.dx, dy 는 상하좌우 확인에 필요한 좌표이다. 2️⃣ 미래 지도 생성for x in range(R): ..

[BOJ] 5635. 생일 (Python/구현/Silver 5)

[문제 링크] 👉https://www.acmicpc.net/problem/5635 Solutionsol.1 (date 함수 사용)from datetime import daten = int(input()) # 학생의 수students = [input().split() for _ in range(n)]# 초기화된 생일 변수youngest_date, oldest_date = date(1990, 1, 1), date(2010, 12, 31)youngest_name, oldest_name = "", ""# 학생들의 생일 비교for name, day, month, year in students: birth_date = date(int(year), int(month), int(day)) if birth..

[BOJ] 2563. 색종이 (Python/구현/Silver 5)

[문제 링크] 👉https://www.acmicpc.net/problem/2563 풀이💡 100x100 도화지의 각 좌표를 하나의 큰 이차원 배열로 생각하여 해당 위치를 차지하고 있는 색종이 위치를 체크 각 색종이의 좌표에 해당하는 영역을 배열에 표시한 다음, 전체 배열에서 검은색 영역의 넓이를 구하면 된다.  100x100 배열 생성paper 배열을 만들어 도화지의 각 위치에 색종이가 붙었는지 확인할 수 있도록 한다.색종이 붙이기각 색종이의 좌표 (x, y)에서 시작하여, 10x10 크기의 정사각형 영역에 해당하는 paper 배열의 값들을 1로 설정검은 영역 계산모든 행을 순회하며 1로 설정된 영역을 합산하여 검은 영역의 넓이를 구한다. SolutionN = int(input()) # 색종이 수p..

[BOJ] 2002. 추월 (Python/구현/Silver 2)

[문제 링크] 👉 https://www.acmicpc.net/problem/2002풀이1️⃣ 차량 진입 순서 기록차량이 진입할 때의 순서를 딕셔너리로 저장하여, 각 차량의 진입 위치를 빠르게 조회할 수 있게 한다.car_in_dict = dict(zip(car_in, range(1, len(car_in) + 1)))  2️⃣ 차량 진입 순서 인덱스 변환차량이 나가는 순서에 따라 각 차량의 진입 순서 인덱스를 리스트로 변환한다. 이 리스트는 나가는 순서를 진입 순서로 매핑한 형태이다.for i in car_out: calc.append(car_in_dict[i])  3️⃣ 추월 여부 확인calc 리스트를 순차적으로 확인하여, 앞선 차량의 진입 순서가 뒤 차량보다 크다면 추월이 발생한 것으로 간주하고..

[BOJ] 1021. 회전하는 큐 (Python/자료구조/Silver 3)

[문제 링크] 👉https://www.acmicpc.net/problem/1021 풀이💡 카드의 절반 기준으로 문제를 푼다.  빼내려는 카드가 중간 보다 왼쪽에 있을 때 2번 연산을 한다.n_deq.rotate(-1)큐를 왼쪽으로 1만큼 회전 반대로 빼내려는 카드가 중간 보다 오른쪽에 있을 때 3번 연산을 한다. n_deq.rotate(1)큐를 오른쪽으로 1만큼 회전 Solutionfrom collections import dequen, m = map(int, input().split())pop_num = list(map(int, input().split()))n_deq = deque()for i in range(1, n + 1): n_deq.append(i)result = 0for i in p..

[BOJ] 2161. 카드1 (Python/자료구조/Silver 5)

[문제 링크] 👉 https://www.acmicpc.net/problem/2161풀이큐 생성 방법from collections import dequequeue = deque()collections의 덱 라이브러리를 import 한다.deque() 를 선언하면 양방향 큐인 덱이 생성된다. 첫 번째 원소를 빼내는 방법queue.popleft()popleft() 는 왼쪽의 첫 번째 원소를 큐에서 빼고 출력한다.pop() 은 오른쪽의 첫 번째 원소를 큐에서 빼고 출력한다. 제일 아래에 있는 카드를 밑으로 옮기는 방법queue.rotate(-1)rotate() 는 큐를 왼쪽 혹은 오른쪽으로 회전시키는 함수이다.인자로 얼만큼 이동시킬지 넘기면 되는데, 이때 그 수가 음수이면 왼쪽으로, 양수이면 오른쪽으로 회전한..

BOJ 10798번 : 세로읽기 (Python/수학/Bronze 1)

[문제 링크] 👉 https://www.acmicpc.net/problem/10798설명영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’가 있다.칠판에 붙여진 단어들이 주어질 때, 영석이가 세로로 읽은 순서대로 글자들을 출력하는 프로그램을 작성하시오. 총 5줄이지만 각 줄은 가변적이다.  Solutionletters = [input() for i in range(5)]for j in range(15): #행의 길이 for i in range(5): #열 if j

BOJ 1934번 : 최소공배수 (Python/수학/Bronze 1)

[문제 링크] 👉 https://www.acmicpc.net/problem/1934설명A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소 공배수라고 한다. A와 B의 최소공배수를 구하라. 풀이sol.1for문으로 45000부터 1까지 일일이 검사한다. a와 b를 i로 나눈 나머지가 0일 때 몫을 a와 b에 다시 저장하고 결과값에 i를 곱해 누적한다. for문이 종료되면 a와 b의 곱을 다시 결과값에 곱하며 저장한다.   큰 수부터 탐색하는 이유for i in range(45000, 1, -1): if a % i == 0 and b % i == 0: 45000부터 1까지 거꾸로 탐색하는 이유는 최대공약수를 가능한 한 빨리 찾기 위함이다. 큰 수부터 ..

BOJ 2775번 : 부녀회장이 될테야 (Python/구현/Bronze 1)

[문제 링크] 👉 https://www.acmicpc.net/problem/2775설명아파트 a층 b호에 거주하려면 (a - 1)층의 1호부터 b호까지의 사람들 수의 합만큼 데리고 와야 한다.이 아파트는 0층부터 있고 1호부터 있다. 0층에는 i호 = i명이 사는데, 1호에는 1명, 2호에는 2명씩 산다는 말이다.모든 거주자들이 위 조건을 모두 만족하고 거주하고 있다고 했을 때 a층 b호에는 총 몇 명을 데리고 와야 하는지 출력해야 한다. 풀이2층 3호의 사람 수를 구해야 할 때 1호2호3호2층1명(1+3) = 4명(1+3+6) = 10명1층1명(1+2) = 3명(1+2+3) = 6명0층1명2명3명  0층은 사람 수가 일정하므로 먼저 0층의 3호까지의 사람 수를 저장한다.ho = [i for i in ..

BOJ 11721 : 열 개씩 끊어 출력하기 (Java/구현/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/11721설명 입력으로 주어진 단어를 열 개씩 끊어서 한 줄에 하나씩 출력한다. 단어의 길이가 10의 배수가 아닌 경우에는 마지막 줄에는 10개 미만의 글자만 출력할 수도 있다.  풀이sol.1카운트 변수를 사용한다. for문에서 글자를 한 줄에 계속 출력하면서 카운트 값도 하나씩 늘린다. 카운트 값이 10이 되면 카운트 변수를 0으로 초기화하고 다음줄로 넘어가서 출력하도록 한다. length()문자열의 길이를 반환한다. charAt()자바에서 String 클래스에 포함된 메서드로, 문자열에서 특정 인덱스에 있는 문자를 반환한다. 이 메서드를 사용하면 문자열의 각 문자에 직접 접근할 수 있다.char ch = str.charAt..

BOJ 3009 : 네 번째 점 (Java/구현/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/3009설명 세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.  풀이아래 사각형은 입력이 다음과 같을 때의 그림이다. 첫 번째 열은 x값, 두 번째 열은 y값을 의미한다.  5 55 77 5 어렵게 생각할 거 없이 x와 y값에서 중복이 없는 숫자를 출력하면 된다. sol.1첫 번째 수와 두 번째 수가 같으면 세 번째 수를 출력한다.첫 번째 수와 세 번째 수가 같으면 두 번째 수를 출력한다.첫 번째 수와 같은 수가 없으면 첫 번째 수를 출력한다. sol.2 - 삼항 연산자를 이용 Expression1이 true이면 Expression2를 반환하고, false이면 Expr..