본문 바로가기

전체 글72

Framwork? library? 프레임워크와 라이브러리 프레임워크 특정 프로그램을 개발하기 위한 여러 요소들과 메뉴얼인 룰을 제공하는 프로그램 어떤 프로그램을 쉽게 만들기 위한 요소와 룰을 제공해 줌으로서 소프트웨어의 생산성과 품질을 높이는 역할 ex) Spring, Django, Ruby on Rails 장점 프로그램의 체계적 관리 기본적인 설계와 라이브러리를 제공하여 개발 속도 향상 코드의 재사용성이 높고 확장성이 좋음 단점 프레임워크 별 별도의 학습이 필요함 자유롭고 유연한 개발이 불가능 프로젝트의 용량이 증가 라이브러리 소프트웨어를 개발하기 쉽게 기능을 제공하는 도구 모음 프레임워크는 틀이고 그 안에서 재사용이 가능하도록 만들어진 도구들 ex) C++ - STL / Python - Pandas, Datetime / Java - .. 2022. 6. 17.
[BOJ] 1041번 - 주사위 밑면을 제외한 나머지 5면의 숫자들의 합을 최솟값으로 출력하는 문제이다. 이 문제를 쉽게 해결하기 위해선 주사위마다 몇개의 면이 보이는지를 분류해야 하는데 위 그림을 보는 것처럼 5면은 1개의 윗면과 4개의 옆면으로 이루어져 있다. 빨간색 : 3면이 보이는 주사위 파란색 : 2면이 보이는 주사위 초록색 : 1면이 보이는 주사위 이를 수식화하여 표현하면 한변의 길이가 N인 정육면체의 주사위인 경우 다음과 같이 나타낼 수있다. 3면이 보이는 주사위 : 4 2면이 보이는 주사위 : 4*(N-1) + 4*(N-2) 1면이 보이는 주사위 : 4*(N-1)*(N-2) + (N-2)*(N-2) 그리고 이 세개의 면에 보이는 숫자들은 6개의 주사위의 숫자중에 마주보는 숫자끼리 중 작은것들로 채우면 된다. #includ.. 2022. 6. 16.
[BOJ] 16953번 - A → B 문제에서는 A를 B로 바꾼다고 했지만 B에서 A로 바꾸는게 코드 짜기 훨씬 편하다. 조건을 나눠본다면 먼저 짝수냐 홀수이냐를 크게 구분할 수 있는데 여기서 문제 조건인 1을 수의 가장 오른쪽에 추가한다는 내용 때문에 1. 가장 먼저 if문에 1의자리가 1인지 확인한다. 10으로 나누고 count ++, 반복문 진행 2. 다음으로 홀수인지 확인 조건에 있는 연산으로는 1을 제외한 홀수의 숫자가 나올 수 없기 때문에 -1 출력하고 종료 3. 그 외의 나머지 경우 2로 나누고 count ++, 반복문 진행 4. while문 내의 조건을 만족하고 빠져나온 경우 주어진 조건인 2를 곱하거나 1을 수의 가장 오른쪽에 추가하는 것으로 숫자를 변환 할수 없으므로 -1 출력하고 종료 #include using names.. 2022. 6. 16.
[BOJ] 1715번 - 카드 정렬하기 priority queue를 사용하여 문제를 해결했다. 여러 카드 묶음들을 두 묶음씩 골라서 합쳐나가면 고르는 순서에 따라서 비교 횟수가 달라지게 된다. 이 때 비교 횟수를 최소한으로 하려면 묶음이 적은 카드들부터 묶어서 합쳐야 한다. priority queue를 통해 카드 뭉치 두개를 변수에 넣고 각각 pop한뒤 두 뭉치의 합을 queue에 넣는 식으로 최소 비교횟수를 구한다. #include #include #define MAX 100000 using namespace std; int N,num; int arr[MAX]; int main() { cin >> N; priority_queue pq; for (int i = 0; i > num; pq.push(num); } i.. 2022. 6. 16.
[BOJ] 1339번 - 단어 수학 알파벳으로 이루어진 문자열을 각각 자릿수마다 숫자로 바꾸어 합의 최대값을 구하는 문제이다. 문제의 예시를 살펴보면 GCF와 ACDEB의 합의 최대값을 구하는 경우를 보면 A*10000 + C*1000 + (D+G)*100 + (E+C)*100 + (B+F)로 표현할 수 있다. 이때 빈도수가 가장 많은 순서대로 알파벳에 값을 넣어주면 되므로 A : 9 / C : 8 / D : 7 / G : 6 / E : 5 / B : 4 / F : 3으로 대입하고 최대값을 계산하면 99437이 나온다. 단계 1 : char로 이루어진 문자열 형태를 알파벳 별 개수로 변환하여 배열에 넣는다. 단계 2 : 알파벳 별 개수를 sort해준다 - 빈도수가 많은 것부터 큰 수를 넣어주기 위해 단계 3 : 9부터 대입하여 알맞은 숫자.. 2022. 6. 15.
[BOJ] 1543번 - 문서 검색 두 문자열을 비교하여 한 문자열에 대하여 다른 문자열이 몇번 등장하는지 구하는 문제이다.(문자열 비교) 문제 조건에서 문자열은 공백도 포함을 하기 때문에 입력에 getline을 사용했다. 이해를 돕기 위해 문자열 A안에 문자열 B가 중복하지 않고 최대 몇번 등장하지 않는다고 가정한다. 이중 for문을 통해 바깥 for문으로 문자열 A길이만큼 돌리고 안쪽 for문으로 문자열 B길이로 비교한 다음 문자열이 다르면 다음 index값으로, 같다면 바깥 for문에서 문자열 B 길이만큼 index를 넘어가서 다시 비교한다. #include #include #include using namespace std; int main() { cin.tie(0); ios_base::sync_with_stdio(false); s.. 2022. 6. 15.
[BOJ] 1735번 - 분수 합 분수 A,B가 주어지고 두 분수의 합을 기약분수 형태로 구하는 문제이다. 기약분수는 더 이상 약분되지 않아야 하므로 분수의 합을 계산해주고 분모,분자의 최대공약수로 각각 나누어 표현한다. 최대공약수는 유클리드 호제법을 사용하여 계산한다. https://dong-min-god.tistory.com/19 최대공약수(GCD), 최소공배수(LCM) C++ 구현 최대공약수(GCD, Great Common Divisor)과 최소공배수(LCM, Least Common Multiple)을 구해보자 최대 공약수 최대공약수는 나머지 연산을 활용하는 유클리드 호제법을 이용하여 쉽게 구할 수 있다. 입력으로 들 dong-min-god.tistory.com #include using namespace std; int gcd(i.. 2022. 6. 15.
Selection Sort(선택 정렬) 가장 작은 요소부터 선택해 알맞은 위치로 옮겨서 순서대로 정렬하는 알고리즘 아직 정렬하지 않은 부분에서 가장 작은 키의 값을 선택한다. 키값과 아직 정렬하지 않은 부분의 첫 번째 요소를 교환한다. # include # define SWAP(x, y, temp) ( (temp)=(x), (x)=(y), (y)=(temp) ) # define MAX_SIZE 5 void selection_sort(int list[], int n){ // 선택 정렬 int i, j, least, temp; for(i=0; i 2022. 6. 14.
[BOJ] 2609번 - 최대공약수와 최소공배수 유클리드 호제법을 이용하여 최대공약수 GCD, 최소공배수 LCM을 구하는 문제이다. 내용은 다음 링크 참조 https://dong-min-god.tistory.com/19 최대공약수(GCD), 최소공배수(LCM) C++ 구현 최대공약수(GCD, Great Common Divisor)과 최소공배수(LCM, Least Common Multiple)을 구해보자 최대 공약수 최대공약수는 나머지 연산을 활용하는 유클리드 호제법을 이용하여 쉽게 구할 수 있다. 입력으로 들 dong-min-god.tistory.com #include using namespace std; int gcd(int a, int b) { while (b != 0) { int r = a % b; a = b; b = r; } return a; .. 2022. 6. 14.