목록전체 글 (95)
total_activ
난 단순하게 다 경우의 수를 선택해서 최대 이기는 경우를 구하는 방식으로 택했다.다만, 중복만 제외시키는 것을 생각했다. 문제 풀이 n/2개의 주사위를 택하는 경우의 수를 구한다.택한 n/2개의 주사위에 대하여 가능한 모든 합을 구한다.택하지 않은 나머지 n/2개의 주사위에 대하여도 가능한 모든 합을 구한다.이후, 각각의 경우의 수끼리 이기는 경우의 수를 구한다.[1] n/2개의 주사위를 택하는 경우의 수를 구한다.첫번째 단계 "n/2개의 주사위를 택하는 경우의 수를 구한다."에 대한 코드 함수이다.사실 combination 함수를 매번 까먹어서 다시 구현하는데 애를 먹었다.. 이제는 그만 잊어버릴때도 됐는데 왜자꾸 삽질을 하는것인지.. n/2개인 num까지 comb에 값을 저장한뒤, 그 결과를 전역변수..
실패한 접근 방법..구현 문제이기에 내용은 간단하다. 주어진 수식을 통해 몇진수인지 확인하고, 만약 2개 이상의 진수로 판단이 되어 다수의 정답이 나오는 경우는 ?로 표현한다. 만약, 특정 진수로 판단이되면 그 진수로 나머지 답을 구한다. 나는 처음에 진수에 대한 계산을 직접 구현하려고 했다. 한자리수끼리 계산을 해서 n진수 값보다 이상이면 한자리수를 더하거나 빼서 계산을 진행했다. 근데 이 방식의 문제는 10진수와 n진수간의 혼동이 온다는 것이다. 분명 이론상으로는 잘 고려해서 코드를 짠거 같지만.. 제출을 해보니 73점.. 어디선가 로직 혹은 예외처리가 잘못된거 같다. 이틀에 걸쳐서 찾아내려고 노력을 했지만 역시 불가능했다. 결국 다른 방법을 찾아야만 했다.. (내 시간들 ㅠㅠㅠ) #include..
내가 제일 싫어하는 그래프 문제를 풀었다.루트노드가 지정되 있지 않는 트리에 대해서 홀짝 트리인지 역홀짝 트리인지 판단하는 문제이다. 모든 노드의 개수만큼 루트 노드를 설정해서 무슨 트리인지 판단한다. 사실 트리노드가 잘 못풀어서 풀다가 도저히 안되서 블로그를 참고했다... 그래서 다른 사람의 풀이를 보면서 기억해야할 정보들을 정리해보려고 한다. 자식 노드를 저장하는 vector 정의그래프 문제를 풀때는 벡터로 간선을 표시해주는 노드에 대해서 자식 노드를 저장하는 vector 값을 만들어야한다!vector child_nodes[1000000];//vector> edgesfor(auto e: edges){ child_nodes[e[0]].push_back(e[1]); child_nodes[e[1]].pu..
LEVEL 3 봉인된 주문풀이 방법1자리 길이인 경우는 26^1가지2자리 길이인 경우는 26^2가지3자리 길이인 경우는 26^3가지4자리 길이인 경우는 26^4가지 즉, aaa와 같이 3자리 길이라면 26^1+ 26^2+(26^2*(n-1) + 26^1*(n-1) + 26^0*(n-1))라고 계산할 수 있다.여기서 n값은 몇번째 자리수에 해당하는 값이다. 이를 활용해서 다음과 같은 방식으로 문제를 풀 수 있다.bans의 위치 값을 구한다. 원하는 n값보다 작은 경우만큼 n값을 더한다. 최종적인 n값 위치의 주문을 구한다26^1+ 26^2+ 26^3...+ 26^(k-1) 26^2+ 26^3...+ 26^k + 26^k위 k값을 구한다. 해당 k값이 바로 answer의 길이가 된다.이후 아래 계산을 진행..
1. DFS정의DFS는 깊이 우선 탐색라고 불림깊은 부분을 우선적으로 탐색하는 알고리즘스택 자료구조(혹은 재귀 함수)를 사용함스택 자료구조입구와 출구가 동일한 형태사용하는 함수 - stack s; - s.top() - s.pop() - s.empty()동작 과정탐색 시작 노드를 스택에 삽입하고 방문처리 진행스택의 최상단 노드에 방문하지 않은 인접한 노드가 하나라도 있으면 그 노드를 스택에 넣고 방문 처리함. 방문하지 않은 인접노드가 없으면 스택에서 최상단 노드를 꺼냄끝날때 까지 반복함여기 강의에선 재귀 함수로 이를 표현했음재귀함수란..?2. 재귀함수재귀 함수란 자기 자신을 다시 호출하는 함수Python에서는 이러한 재귀함수를 스택형태로 메모리에 쌓아올리기에 특정 메모리 한계까지 반복적으로 쌓이면 ..
그리디 알고리즘 개요1. 그리디 알고리즘그리디 알고리즘은 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미함일반적인 그리디 알고리즘은 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구함단순히 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지 검토하는 과정이 필요함예시 : 루트 노드부터 시작하여 거쳐가는 노드 값의 합을 최대로 만들고 싶습니다.→ 하지만 단순히 매 상황에서 가장 큰 값만 고른다면? : 그리디 알고리즘으로 구한 방식→ 우리가 원하는 최대의 노드 합으로 도달하지 못하게됨 (21 > 19)→ 그렇기에 그리디 알고리즘을 사용할때는 그 정당성이 중요함 그리디 알고리즘 문제는 이렇게 해야지 최적의 해가 출력되도록 문제를 만들어버림2. 그리디 알고리즘 예시: ..
근황 이야기..2024년 BoB 라는 프로그램에 참여하게 되면서 굉장히 바쁜 나날들을 보냈다. 운이 좋게 BoB에 합격하게 되어 6개월간 교육과 프로젝트, 과제에 찌든 삶을 보냈던거 같다. 그래서인지 2023년 말을 기점으로 나의 티스토리 게시글은 잠적했다. 하지만 이제는 BoB도 수료하고 졸업도한 진정한 백수... 아니 취준생으로서 나의 공부 내용들을 다시 정리해서 올려보려고한다. 나는 2025년을 코테 준비로 시작했다. 진짜 코테를 처음 풀어보기에 일단 자료구조와 알고리즘에 대한 이론을 확립해야한다고 생각했다. 그래서 코테 강좌를 찾아봤고 그중 이코테 2021 유튜브를 완독하기로 마음을 먹었고, 강좌를 보면서 정리한 내용들을 여기에 올릴려고한다. 미래의 나를 위한 정리 글이지만, 나처럼 코테가 처음이..
최대 공약수, 최대 공배수A mod B =C 에서 C가 0일 때, B가 최대공약수이다.최대 공배수는 A * B / (최대공약수) 이다. 피보나치피보나치는 값이 커지기 때문에 int가 아닌 long으로 처리하라! Queue#include #include using namespace std;int main(){ queue q; q.push(1); q.push(2); q.push(3); cout 함수설명q.empty()비어있으면 true, 아니면 falseq.size()원수의 수를 리턴q.front()맨 앞 원소 리턴q.back()맨 뒤 원소 리턴q.push(a)맨 뒤 원소 a를 추가q.pop()맨 앞 원소 삭제