Algorithm/BOJ 59

[백준] #1946 신입사원

https://www.acmicpc.net/problem/1946 1946번: 신입 사원 첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성 www.acmicpc.net 간단한 그리디 알고리즘 문제로, 조금만 다르게 생각해본다면 쉽게 풀 수 있는 문제다. 풀이 가장 단순하게 브루트포스를 이용하여 모든 인덱스를 전수조사하는 방법도 있겠지만, 그렇게 될 경우 반복문 2개를 사용하게 되어 연산 횟수가 10B 가 된다. 따라서, 반복문 하나만으로 해결해야 하는 문제이다. 다음 특성만 생각하면 무척 쉬운 문제이다. 1. 지원자 중, 두 심사의 등수 모..

Algorithm/BOJ 2021.09.28

[백준] #16953 A → B

16953번: A → B (acmicpc.net) 16953번: A → B 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. www.acmicpc.net 백준 #12904 A와 B와 상당히 유사한 문제이다. 다른점이라고 한다면, data-type이 string이 아닌 int 라는 점..? 알고리즘 분류는 그래프와 BFS로 되어있던데, 굳이 BFS를 활용하지 않아도 충분히 풀 수 있다. 풀이 B에서 A를 만드는 알고리즘으로 바꾸어 생각해보자. 그렇다면 적용할 수 있는 연산은 B에 따라 총 3가지로 정해지게 된다. case 1. B의 마지막 숫자가 1인 경우 : 10으로 나누어 줌 (마지막 숫자인 1을 없애주는 효과) case 2. B가 짝수인 경우 : 2로 나누어 줌 case 3. B의 마지..

Algorithm/BOJ 2021.08.23

[백준] #12904 A와 B

12904번: A와 B (acmicpc.net) 12904번: A와 B 수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수 www.acmicpc.net 아무리 생각해도 브루트포스로 풀면 시간초과가 나올거 같아 생각을 하던 중, S에서 T를 만들지 말고 T에서 S를 만드는 방법으로 생각하니 금방 풀렸다. 풀이 T에서 S로 만드는 알고리즘으로 바꾸어 생각해보자. 그렇다면 적용할 수 있는 연산은 T의 마지막 글자에 따라 무조건 하나로 정해지게 된다. case 1. T의 마지막 글자가 A인 경우 : pop_back() case 2. T..

Algorithm/BOJ 2021.08.22

[백준] #1918 후위 표기식

1918번: 후위 표기식 (acmicpc.net) 1918번: 후위 표기식 첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 A~Z의 문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 수식 www.acmicpc.net 저번 학기 자료구조 수업때 배웠던 중위표기식 -> 후위표기식 변환 알고리즘을 복습할겸 다시 풀어보았다. 자료구조 수업때는 JAVA 환경에서 직접 stack 함수를 만들어 구현하였는데, 이번에는 C++환경에서 stack 라이브러리를 가져와 새로 구현하게 되었다. 오랜만에 구현하는 내용이라 그런지, stack에 담긴 연산자 우선순위를 고려하여 처리해주는 부분에서 조금 버벅거렸다. 구현 #include #in..

Algorithm/BOJ 2021.08.22

[백준] #17609 회문

17609번: 회문 (acmicpc.net) 17609번: 회문 각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다. www.acmicpc.net #1254에서 다뤘던 팰린드롬 관련 문제이기도 했고, 애초에 그리 어려운 문제는 아니었지만, 중간에 반례를 찾던중 접근 방식을 한번 갈아 엎어서 시간이 오래 걸렸다. 팰린드롬 (palindrome) / 회문 (回文) 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다. #1254 팰린드롬 만들기와 같은 내용을 담고있어서 접근하기엔 수월했다. 처음엔 #1254에서의 코드를 조금 고쳐 함수 하나로 처리하도록 만들었다. 기존 C++ 코드 (함..

Algorithm/BOJ 2021.08.19

[백준] #1254 팰린드롬 만들기

1254번: 팰린드롬 만들기 (acmicpc.net) 1254번: 팰린드롬 만들기 동호와 규완이는 212호에서 문자열에 대해 공부하고 있다. 규완이는 팰린드롬을 엄청나게 좋아한다. 팰린드롬이란 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다. 동호는 www.acmicpc.net 이해를 하고나면 쉬운 문제이다. 팰린드롬 (palindrome) 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다. #include using namespace std; string s; int len; bool F(int a) { for (int i = 0; a+i < len-1-i; i++) { if (s[a+i] != s[len-1-i]) return false; } return true; } ..

Algorithm/BOJ 2021.08.17

[백준] #4948 베르트랑 공준

4948번: 베르트랑 공준 (acmicpc.net) 4948번: 베르트랑 공준 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼 www.acmicpc.net 베르트랑 공준 문제를 풀기 위해서는 이 에라토스테네스의 체를 활용한 소수판별법을 먼저 알아야한다. 이 방법을 이용하지 않고 기존의 방법처럼 무식하게 풀다보면 시간 초과가 나오게 된다. 에라토스테네스의 체 (Sieve of Eratosthenes) 에라토스테네스의 체란 소수를 대량으로 빠르고 정확하게 구하는 방법이다. 시간 복잡도는 O(N^(1/2)). 이는 다음과 같은 절차로 진행된다. 원하는 숫자까지의..

Algorithm/BOJ 2021.08.15

[백준] #7576 토마토

7576번: 토마토 (acmicpc.net) 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net BFS 알고리즘을 이용하여 구현하는 그래프 탐색 문제이다. 알고리즘을 구상하고 코드로 직접 옮기는 과정에서, 행렬로 되어있는 입력 예시들을 그래프로 바꾸어 이해하는 단계가 좀 껄끄러웠다. 게다가 문제에서 익은 토마토의 개수가 여러개인 경우도 고려하여 구현해야 되기 때문에 이것또한 생각을 많이 해야했다. C++ / vs code 환경에서 구현하였다. #include #include using namesp..

Algorithm/BOJ 2021.08.09

[백준] #1260 DFS와 BFS

1260번: DFS와 BFS (acmicpc.net) 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net DFS와 BFS의 구현을 묻는 아주 간단한 문제이다. 우선, DFS와 BFS의 의미는 다음과 같다. DFS : Depth-First Search (깊이 우선 탐색) / BFS : Breadth-First Search (너비 우선 탐색) DFS는 함수의 재귀 호출을 이용하여 소스코드로 구현하게 되지만, BFS의 경우엔 자료구조 Queue를 사용하여 소스코드로 구현하는것이 일..

Algorithm/BOJ 2021.08.08
728x90