분류 전체보기

    알고리즘 수업 - 병합 정렬 1 풀이

    문제 링크: https://www.acmicpc.net/problem/24060 백준 재귀 4단계 - 24060번 알고리즘 수업 - 병합 정렬 1을 풀어보았다. 풀이: 병합 정렬을 구현하고, k번째를 출력하면 된다. C++의 경우, https://codnote.tistory.com/3 를 참고했다. 파이썬의 경우, https://velog.io/@wngud4950/%EB%B0%B1%EC%A4%80-24060.-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%88%98%EC%97%85-%EB%B3%91%ED%95%A9%EC%A0%95%EB%A0%AC1 를 참고했다. C++ #include using namespace std; int* A; int* tmp; int N, cnt = ..

    재귀의 귀재 풀이

    문제 링크: https://www.acmicpc.net/problem/25501 백준 재귀 3단계 - 25501번 재귀의 귀재를 풀어보았다. 풀이: 재귀함수를 받아 호출 횟수를 출력하면 된다. 재귀함수에 전역변수를 선언해야 한다. 전역변수를 recursion안에 넣어야 한다. C++ #include #include #include using namespace std; int cnt=0; int recursion(const string& s, int l, int r) { cnt++; if (l >= r) return 1; else if (s[l] != s[r]) return 0; else return recursion(s, l + 1, r - 1); } int isPalindrome(const string..

    피보나치 수 5 풀이

    문제 링크: https://www.acmicpc.net/problem/10870 백준 재귀 2단계 - 10870번 피보나치 수 5를 풀어보았다. 풀이: 피보나치 수를 구현한다. C++ #include using namespace std; int sol(int a) { if(a==0) return 0; if(a==1) return 1; return sol(a-1)+sol(a-2); } int main() { int n; scanf("%d",&n); printf("%d",sol(n)); } Python def fib(a): if a==0: return 0 if a==1: return 1 return fib(a-1)+fib(a-2) n=int(input()) print(fib(n)) Java

    팩토리얼 풀이

    문제 링크: https://www.acmicpc.net/problem/10872 백준 재귀 1단계 - 10872번 팩토리얼를 풀어보았다. 풀이: 재귀함수를 구현하면 된다. 입력값이 0일 때도 신경 쓰자. C++ #include using namespace std; int sol(int a) { if(a==1||a==0) return 1; // 0!의 값은 1 return a*sol(a-1); } int main() { int n; scanf("%d",&n); printf("%d",sol(n)); } Python def fac(a): if a==1 or a==0: return 1 return a*fac(a-1) n=int(input()) print(fac(n)) Java

    좌표 압축 풀이

    문제 링크: https://www.acmicpc.net/problem/18870 백준 정렬 12단계 - 18870번 좌표 압축을 풀어보았다. 풀이: 압축한 결과는 좌표의 순서와 같다는 점을 알아내면 된다. C++의 경우, erase와 unique를 써서 중복을 제거했다. (전에는 입력마다 중복인지 확인했는데, 그러면 시간초과가 난다) 파이썬의 경우, 딕셔너리를 사용해 시간을 줄였다. C++ #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); // 시간 빠르게 하기 위해서 cin.tie(NULL); cout.tie(NULL); int n; cin>>n; vector v1; // 모든 입력 ..

    나이순 정렬 풀이

    문제 링크: https://www.acmicpc.net/problem/10814 백준 정렬 11단계 - 10814번 나이순 정렬을 풀어보았다. 풀이: 가입순을 신경 써서 풀어야 한다. 파이썬의 경우, lambda에서 조건을 두 개(나이, 가입순)를 써서 정렬했다. C++ #include #include #include using namespace std; bool comp(pair a,pair b) { if(a.second.first==b.second.first) return a.firstn; vector user; for(int i=0;i>age>>name; user.push_back(pair(i,pair(age,name))); } sort(user.begin(),user.end(),comp); for..

    단어 정렬 풀이

    문제 링크: https://www.acmicpc.net/problem/1181 백준 정렬 10단계 - 1181번 단어 정렬을 풀어보았다. 풀이: 사전순으로 정렬을 하고, 그리고 길이순으로 정렬을 하면 된다. C++의 경우, find 리턴값이 v.end() 면 요소가 있다는 것이고, bool 함수의 리턴값으로 비교함수를 줄 수 있다는 것을 알게 되었다. C++ #include #include #include using namespace std; bool cmp(string s1, string s2) // 길이 비교 함수 { if(s1.size()==s2.size()) return s1n; vector v; for(int i=0;i>s; if(find(v.begin(),v.end(),s)==v.end()) ..

    좌표 정렬하기 2 풀이

    문제 링크: https://www.acmicpc.net/problem/11651 백준 정렬 9단계 - 11651번 좌표 정렬하기 2를 풀어보았다. 풀이: y값대로 정렬하고 출력하면 된다. C++ #include #include #include using namespace std; int main() { int n; cin>>n; vector vv; for(int i=0;i>a>>b; v.push_back(b); v.push_back(a); vv.push_back(v); } sort(vv.begin(), vv.end()); for(int i=0;i

    좌표 정렬하기 풀이

    문제 링크: https://www.acmicpc.net/problem/11650 백준 정렬 8단계 - 11650번 좌표 정렬하기를 풀어보았다. 풀이: 좌표를 받아 x와 y좌표대로 정렬하면 된다. C++ #include #include #include using namespace std; int main() { int n; cin>>n; vector vv; for(int i=0;iinp; v.push_back(inp); } vv.push_back(v); } sort(vv.begin(), vv.end()); for(int i=0;i

    소트인사이드 풀이

    문제 링크: https://www.acmicpc.net/problem/1427 백준 정렬 7단계 - 1427번 소트인사이드를 풀어보았다. 풀이: 문자열로 입력받고 거꾸로 정렬해 출력한다. C++의 경우, string 자체가 sort가 된다는 것과 greater을 써서 내림차순을 할 수 있다는 것을 알게 되었다. C++ #include #include using namespace std; int main() { string s; cin>>s; sort(s.begin(),s.end(),greater()); // greater을 하면 내림차순이 된다 cout