[BOJ] 1991번: 트리 순회
·
Problem Solving/Baekjoon
출처 : https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net node 클래스를 만들어서 left 자식과 right 자식을 관리해주면 된다. 쉬운 문제였다 ! package com.ll.boj.silver.p1991; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class Main { sta..
[BOJ] 4485번 : 녹색 옷 입은 애가 젤다지?
·
Problem Solving/Baekjoon
출처 : https://www.acmicpc.net/problem/4485 4485번: 녹색 옷 입은 애가 젤다지? 젤다의 전설 게임에서 화폐의 단위는 루피(rupee)다. 그런데 간혹 '도둑루피'라 불리는 검정색 루피도 존재하는데, 이걸 획득하면 오히려 소지한 루피가 감소하게 된다! 젤다의 전설 시리즈의 주 www.acmicpc.net 첫 접근은 최단 경로를 구하는 문제라고 생각해서 BFS를 사용했다. 하지만 테스트 케이스조차 통과하지 못하였고 힌트를 얻어 다익스트라 알고리즘을 사용하는 것을 파악했다. 출발지 (0,0)에서 목적지 (n-1, n-1)까지 최단 비용을 사용하여 목적지에 도달해야 한다. 그러기 위해서는 무작정 출발지에서 최소 비용을 따라갈 것이 아니라 지속적인 갱신이 필요하다. 파란색 경로..
[BOJ] 2252번 : 줄 세우기
·
Problem Solving/Baekjoon
https://www.acmicpc.net/problem/2252 2252번: 줄 세우기 첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의 www.acmicpc.net 알고리즘 : 위상 정렬 import itertools import sys, heapq si = sys.stdin.readline from collections import defaultdict, deque, Counter from bisect import bisect_left, bisect_right from math import factorial,sqr..
[BOJ] 3085번: 사탕 게임
·
Problem Solving/Baekjoon
출처 : https://www.acmicpc.net/problem/3085 3085번: 사탕 게임 예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다. www.acmicpc.net 1. 문제 설명 N * N 크기에 사탕이 모두 채워진다. 사탕의 색이 다른 인접한 두 칸을 골라 서로 교환한 후에 모두 같은 색으로 이루어져 있는 가장 긴 연속 부분(행 또는 열)을 구하라. 사탕이 채워진 상태가 주어졌을 때, 상근이가 먹을 수 있는 사탕의 최대 개수를 구하라. 2. 접근 방식 및 시간복잡도 이중 for문을 돌면서 해당 위치(i, j)의 사탕을 (i, j+1)의 사탕과 교환 후 행 기준 연속된 사탕의 개수, 열 기준 연속된 사탕의 개수를 계산하고 바꾼 사탕을 다시 되돌려놓고, (i, j)의..
[BOJ] 1476번: 날짜 계산
·
Problem Solving/Baekjoon
출처 : https://www.acmicpc.net/problem/1476 1476번: 날짜 계산 준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타 www.acmicpc.net 1. 문제 설명 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구(E), 태양(S), 달(M)이다. (1
[BOJ] 14502번: 연구소
·
Problem Solving/Baekjoon
출처 : https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 1. 문제 설명 상,하,좌,우로 확산되는 바이러스를 막기 위해 3개의 벽을 활용해서 안전 영역의 최대 크기를 구하는 문제이다. 2. 접근 방식 백트래킹 + BFS로 풀었다. 생각보다 쉬웠던 문제였던 것 같다. 코드길이는 좀 길긴하지만 크게 막힘이 없었다. 3. 주석 달기 (변수 설명, 각 줄마다 문장으로 설명, 함수 설명) import java.io.BufferedReader; import java...
[BOJ] 14926번: Not Equal
·
Problem Solving/Baekjoon
출처 : https://www.acmicpc.net/problem/14926 14926번: Not Equal 주어진 N개의 수가 모두 서로 다르다는 것은 기호 "!="를 통해 하나의 식으로 표현할 수 있다. 예를 들어 A, B, C가 모두 서로 다르다는 것은 논리식으로 (A != B) && (B != C) && (C != A) 로 쓸 수 있고, 이 www.acmicpc.net 1. 문제 설명 주어진 N개의 수가 모두 서로 다르다는 것은 기호 "!="를 통해 하나의 식으로 표현할 수 있다. 예를 들어 A, B, C가 모두 서로 다르다는 것은 논리식으로 (A != B) && (B != C) && (C != A) 로 쓸 수 있고, 이를 다음과 같이 한 줄로 표현하는 것을 A, B, C에 대한 "한 줄 표기법"..
[BOJ] 1753번: 최단경로
·
Problem Solving/Baekjoon
출처 : https://www.acmicpc.net/problem/1753 1753번: 최단경로 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가 www.acmicpc.net 1. 문제 설명 최단 경로를 구하는 문제이다. 2. 접근 방식 다익스트라 알고리즘을 사용하면 쉽게 풀 수 있다 !! (기본적인 문제) 3. 주석 달기 (변수 설명, 각 줄마다 문장으로 설명, 함수 설명) import java.util.*; public class Main { static class Edge { // from 에서 to 정점까지의 가중치..
[BOJ] 1326번: 폴짝폴짝
·
Problem Solving/Baekjoon
출처 : https://www.acmicpc.net/problem/1326 1326번: 폴짝폴짝 첫째 줄에 징검다리의 개수 N(1≤N≤10,000)이 주어지고, 이어서 각 징검다리에 쓰여 있는 N개의 정수가 주어진다. 그 다음 줄에는 N보다 작거나 같은 자연수 a, b가 주어지는 데, 이는 개구리가 a번 www.acmicpc.net 1. 문제 설명 개구리는 일렬로 놓여 있는 징검다리를 건넌다. 각 징검다리에는 숫자가 쓰여 있고 쓰여진 수의 배수만큼 떨어져 있는 곳으로만 이동할 수 있다. 2. 접근 방식 양수 배수 방향으로만 가는 조건을 고려해서 시간을 많이 썼다. 징검다리에는 양수의 배수 방향과 음수의 배수 방향 둘 다 올 수 있다는 점을 고려해야 한다. DFS가 아닌 BFS를 활용하는 이유는 q에 이동..
[BOJ] 9375번: 패션왕 신해빈
·
Problem Solving/Baekjoon
출처 : https://www.acmicpc.net/problem/9375 9375번: 패션왕 신해빈 첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다. www.acmicpc.net 1. 문제 설명 혜빈이는 한번 입었던 옷들의 조합은 절대 다시 입지 않는다. 옷을 입을 때 주어진 옷의 종류를 모두 입지 않아도 된다. (안경, 반팔, 반바지가 주어지면 안경과 반팔만 입는 경우, 반팔과 반바지만 입는 경우도 존재한다.) 알몸인 상태만 되지 않으면 된다. 2. 접근 방식 조합으로 ..
[BOJ] 14500번: 테트로미노
·
Problem Solving/Baekjoon
출처 : https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net 1. 문제 설명 다음 조건을 만족하고, 테트로미노 하나를 적절히 놓아서 놓인 칸에 쓰여 있는 수들의 합이 최대가 하는 값을 구한다. 테트로미노는 반드시 한 정사각형이 정확히 하나의 칸에 포함해야 하며, 회전이나 대칭이 가능하다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 2..
[BOJ] 12813번: 이진수 연산
·
Problem Solving/Baekjoon
출처 : https://www.acmicpc.net/problem/12813 12813번: 이진수 연산 총 100,000 비트로 이루어진 이진수 A와 B가 주어진다. 이때, A & B, A | B, A ^ B, ~A, ~B를 한 값을 출력하는 프로그램을 작성하시오. www.acmicpc.net 1. 문제 설명 총 100,000 비트로 이루어진 이진수 A와 B가 주어진다. 이때, A & B, A | B, A ^ B, ~A, ~B를 한 값을 출력하는 프로그램을 작성하시오. 2. 접근 방식 파이썬에서 ~연산자는 비트 반전 후 ㅎ2의 보수로 만들어서 리턴한다고 한다. 당연히 ~A, ~B를 하면 될 줄 알았는데 아니였다.. 1의 보수를 만들어 주려면 1. A ^ mask(A의 자릿수만큼 1로 채운 것) 2. ma..