본문 바로가기

알고리즘69

[C++] [백준 3040] 백설 공주와 일곱 난쟁이 문제 풀기 전 생각 : /* 아홉명의 난장이의 모자에 쓰인 숫자 9개 중 7개를 더했을때 숫자 100이 되는 숫자들이 출력되어야 한다 어느 난쟁이가 가짜인지 판별하려면 모두 더한 값에서 두 숫자를 뺐을때 100이 되면 두 숫자가 모자에 쓰인 난장이가 가짜인것을 알 수 있다 */ #include using namespace std; int main() { int n[9],sum=0; for(int i=0 ; i 2021. 8. 9.
[C++] [백준 15552] 빠른 A+B 문제 풀기 전 생각 : /* 이 문제가 말하려는 것은 아마도 입출력에서 걸리는 시간을 줄일 줄 알아야 한다는 것 같다 printf scanf 함수들을 사용하면 큰 문제 없이 풀 수 있는 문제이다 */ #include int main() { int n,a,b; scanf("%d",&n); for(int i=0 ; i> T; for (int i = 0; i > A >> B; sstream 2021. 8. 9.
[C++] [백준 1920] 수 찾기 문제 풀기 전 생각 : /* 먼저 비교에 쓰일 숫자들을 입력 받고 숫자를 입력받을 때 위에서 저장한 숫자들에 존재하는지 find 함수를 통해 판별한다. 만약 존재한다면 1을 출력 존재하지 않는다면 0을 출력한다 */ #include using namespace std; int main(){ int n,m,tmp; int *p; scanf("%d",&n); int a[n]; for(int i=0 ; i n; for(int i=0;i> a[i]; } sort(a,a+n); cin >> m; for(int i=0;i> t; if(binary_search(a,a+n,t)) cout 2021. 8. 9.
[C++] [LeetCode 206] Reverse Linked List 문제 풀기 전 생각 : /* 링크드 리스트 iterator 를 사용한 반복문으로 현재 노드의 다음 노드의 포인터를 저장하고 현재 노드의 연결고리를 끊고 전 노드와 연결 그리고 전 노드를 현재 노드로 변경 작업을 모든 노드를 거칠 때까지 반복 */ class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* pre=head, *prepre= NULL; if(head == NULL) return head; for(ListNode* ln = head->next ; ln != NULL ; ln = ln->next){ pre->next = prepre; prepre = pre; pre = ln; } pre->next = prepre; ret.. 2021. 8. 9.
[C++] [LeetCode 26] Remove Duplicates from Sorted Array 문제 풀기 전 생각 : /* 반복문으로 바로 전 원소와 비교하며 만약 바로 전 원소가 현재 원소보다 크다면 count를 리턴하고 그렇지 않다면 전 원소를 현재 원소로 채우고 count를 증가시킨다. */ class Solution { public: int removeDuplicates(vector& nums) { if(nums.size() == 0) return 0; int x = nums[0]; int count = 1; for(int i=1 ; i 2021. 8. 9.
[C++] [LeetCode 704] Binary Search 문제 풀기 전 생각 : /* find 함수를 사용한다. 만약 존재하지 않는다면 -1을 리턴하고 존재한다면 find 함수에서 얻은 값에서 begin iterator를 뺸 값을 리턴한다. */ class Solution { public: int search(vector& nums, int target) { auto it = find(nums.begin(), nums.end(), target); if(it == nums.end()) return -1; return it-nums.begin(); } }; https://leetcode.com/problems/binary-search/ Binary Search - LeetCode Level up your coding skills and quickly land a .. 2021. 8. 9.
[C++] [LeetCode 35] Search Insert Position 문제 풀기 전 생각 : /* find 함수를 사용해서 해당 타겟이 존재하는지 판별 만약 존재한다면 타겟의 인덱스를 리턴 존재하지 않는다면 반복문으로 타겟보다 큰 값이 나올때 검색하다 발견하면 리턴 마지막까지 타겟이 크다면 입력받은 백터의 크기를 리턴 */ class Solution { public: int searchInsert(vector& nums, int target) { auto it = find(nums.begin(), nums.end(), target); if(it != nums.end()) return it-nums.begin(); for(int i=0 ; i target) return i; } return nums.size(); } }; https://leetcode.com/problems.. 2021. 8. 9.
[C++] [백준 11004] K번째 수 문제 풀기 전 생각 : /* 뭐야 엄청 쉽네 라고 생각했다 정렬하고 2번째 숫자 출력하면 끝이다 접근법은 맞았다. */ #include #include using namespace std; bool compare(int x, int y) { return x > n >> k; int arr[n]; for(int i=0 ; i> k; for (int i = 0; i > ipt[i]; nth_element(ipt, ipt + k - 1, ipt + n); cout 2021. 7. 27.
[C++] [백준 11650] 좌표 정렬하기 문제 풀기 전 생각 : /* pair 와 sort 함수를 사용하면 쉽게 풀 수 있는 문제이다! */ #include #include using namespace std; bool comp(pair a,pair b){ if(a.first == b.first){ return a.second > n; pair arr[n]; for(int i=0 ; i> arr[i].first >> arr[i].second; } sort(arr,arr+n,comp); for(int i=0 ; i> v[i].second; } sort(v, v+n); for(int i = 0; i < n; i++) cout 2021. 7. 27.
[C++] [백준 1427] 소트인사이드 문제 풀기 전 생각 : /* 숫자의 입력을 문자열로 받는다. 그리고 해당 문자열을 각 글자별로 쪼개어 저장한다. 그리고 정렬 후 출력한다. */ #include #include using namespace std; bool comp(int a,int b){ return a > b; } int main(){ string s; cin >> s; int arr[s.length()]; for(int i=0 ; i 2021. 7. 27.
[C++] [백준 1755] 숫자놀이 문제 풀기 전 생각 : /* 입력 받은 범위의 숫자들을 알파벳으로 변환 후 저장한다. 그리고 소트 함수를 이용해 정렬한다. */ #include #include using namespace std; string num[10] = {"zero","one","two","three","four","five","six","seven","eight","nine"}; bool comp(pair p1,pair p2){ return p1.first > n1 >> n2; int n = n2 - n1 + 1; pair str[n]; for(int i = n1 ; i 2021. 7. 27.
[C++] [LeetCode 169] Majority Element 문제 풀기 전 생각 : /* 먼저 입력받은 백터를 정렬한다. 그 후 저장된 숫자를 하나하나 전 숫자와 비교하며 카운트를 한다. 마지막에 가장 많은 카운트를 기록한 숫자를 출력한다. */ class Solution { public: int majorityElement(vector& nums) { int max=0,max_i=0; int pre=0,pre_i=0; sort(nums.begin(),nums.end()); for(int i=0 ; i max){ max = pre; max_i = pre_i; } pre_i = nums[i]; pre = 1; } else { pre++; } } if(pre > max) max_i = pre_i; return max_i; } }; https://leetcode.com.. 2021. 7. 27.