본문 바로가기

알고리즘12

[C] 백준 10866 https://www.acmicpc.net/problem/10866 10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 연결리스트가 생각이 안나서 배열로 덱을 구현했다. 주어지는 명령의 수가 10000이기 때문에 덱에는 최대 10000개의 데이터가 들어갈 수 있다. 이처럼 덱의 최대 크기가 정해져 있기에 원형덱으로 문제를 풀 수 있었다. 최대 크기가 정해져 있지 않다면 연결리스트로 푸는 편이 좋다. front와 back으로 크기를 구하는게 까다로울 것 같아서 deque 구조체에 size라는 변수를 .. 2022. 1. 16.
[C] 백준 10828 https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 스택 - 선형 자료구조 - LIFO(Last-In, First-Out) - 배열 기반 구현 - 연결리스트 기반 구현 스택 ADT - init - empty - push - pop - peek ADT(Abstract Data Type) - 추상자료형 - 구체적인 기능의 완성과정을 언급하지 않고, 순수하게 기능이 무엇인지를 나열한 것 #include #include typedef s.. 2022. 1. 16.
[C] 백준 1850 https://www.acmicpc.net/problem/1850 1850번: 최대공약수 모든 자리가 1로만 이루어져있는 두 자연수 A와 B가 주어진다. 이때, A와 B의 최대 공약수를 구하는 프로그램을 작성하시오. 예를 들어, A가 111이고, B가 1111인 경우에 A와 B의 최대공약수는 1이고, A www.acmicpc.net 입력되는 수는 2^63보다 작은 자연수이므로 long long 데이터 타입을 사용한다. 모든 자리가 1로 이루어지기 때문에 A와 B를 이루는 1의 개수의 최대공약수를 구하고 그 최대공약수 만큼 1을 출력하면 A와 B의 최대공약수를 출력할 수 있다. 최대공약수는 유클리드 알고리즘을 이용하여 구했다. #include long long func(long long A, long lo.. 2022. 1. 9.
[C] 백준 11576 https://www.acmicpc.net/problem/11576 11576번: Base Conversion 타임머신을 개발하는 정이는 오랜 노력 끝에 타임머신을 개발하는데 성공하였다. 미래가 궁금한 정이는 자신이 개발한 타임머신을 이용하여 500년 후의 세계로 여행을 떠나게 되었다. 500년 후의 www.acmicpc.net 문제가 길지만 해야하는 건 간단하다. 1. A진법 수를 10진법으로 변환 2. 10진법 수를 B진법으로 변환 3. B진법 수 출력 A_to_ten 함수에서 A진법 수를 10진법으로 변환해서 반환하였다. 반환값은 변수 C에 저장하였다. ten_to_B 함수는 재귀함수이다. 이 함수를 이용하여 10진법을 B진법으로 변환하여 출력하였다. #include #include int A_to.. 2022. 1. 7.
[C] 백준 11005 https://www.acmicpc.net/problem/11005 11005번: 진법 변환 2 10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 www.acmicpc.net 10진법 수 N을 B진법으로 바꾸는 문제이다. B의 범위는 2 ≤ B ≤ 36이다. 만약에 314라는 10진수의 각 자리수를 파싱한다면 314 % 10 = 4 (출력) 314 / 10 = 31 31 % 10 = 1 (출력) 31 / 10 = 3 3 (출력) 나머지 연산과 나눗셈을 반복함으로써 각 자리수를 나눌수 있다. 나누는 수는 그 수의 진법이다. (10진법이므로 10을 나누었다) 다른 진.. 2022. 1. 7.
[C] 백준 1373 자리수 구분의 용이성을 위해 2진수를 문자열로 받는다. 문자열로 받으면 배열의 인덱스를 통해 자리수 구분이 가능하다. 8진수를 구하기 위해서는 2진수를 3개씩 묶어야 한다. 이 때 문제가 되는 경우는 3으로 나누어 떨어지지 않는 경우다. 나머지가 1, 2인 조건에서 최상위 자리의 8진수 값을 출력하였고 이후에는 2진수를 8진수로 변환하는 반복문을 돌렸다. #include #include #include #include char bin[1000000]; int main() { int len; int r; int oct = 0; scanf("%s", bin); len = strlen(bin); r = len % 3; if (r == 1) { oct += (bin[0] - 48) * 1; printf("%d".. 2022. 1. 6.