일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- 정석
- Computer science
- c++
- OS
- 컴퓨터공학과
- 컴공과
- Stack
- 오퍼레이팅시스템
- 구현
- 자료구조
- 너비우선탐색
- 코딩
- coding
- DP
- 백준
- 오에스
- 북리뷰
- 정석학술정보관
- 스택
- cs
- 그래프
- vector
- 문제풀이
- 컴공
- Operating System
- 브루트포스
- 개발
- 코테
- bfs
- 알고리즘
- Today
- Total
목록coding (150)
Little Jay
C++을 하다보면 내가 의도하지 않은 대로 컴파일되어 코드가 실행되는 경우가 있다. 개인적으로 생각할 때 for 반복문에서 조건 설정할 때 생각지도 못한 부분에서 실수를 많이 해 여기에 포스팅 해본다. #include #include using namespace std; int main() { string s = "aa"; for (int i = 0; i < s.length() - 3; i++) { cout
vector container을 사용할 때 대부분 push_back()을 사용한다. 직관적으로 vector 컨테이너에 원소를 위에 삽입한다라는 의미이다. 그러나 push_back()함수에는 문제점이 존재한다. push_back() 함수는 '객체'를 집어넣는 형태이므로, 원형은 아래와 같다. void push_back (const value_type& val); void push_back (value_type&& val); emplace_back()도 동일하게 컨테이너 마지막에 '객체'를 삽입하는 기능을 수행한다. push_back()쪽을 먼저 본다면 push_back()은 rvalue, 즉 임시객체가 필요하다. 그렇기 때문에 push_back()이 어떻게 동작을 하나면, 인자로 필요한 객체를 생성 후 p..
마스크를 쓰지 않고는 밖을 다니면 안 되는 코로나19 시대입니다. 코로나19가 장기화되면서 코로나 블루라는 말이 나올 정도로 우울한 사람들이 많아지고 있습니다. 세계적인 전기자동차 회사 경영자인 '얼른 마스크'씨는 자신의 전기자동차를 타는 고객들이 조금이라도 행복할 수 있기를 바라며 판매하는 전기자동차 번호판 일련번호 4자리를 행복 수(happy number)로 채우고자 합니다. 행복 수는 각 자릿수의 제곱의 합으로 변환하는 과정을 반복할 때 언젠가는 1에 도달하는 수입니다. 예로, 13 → 1x1 + 3x3 = 10 → 1x1 + 0x0 = 1이므로 13은 행복 수입니다. 행복 수가 아닌 것은 슬픈(sad) 수 또는 불행(unhappy) 수라고 불립니다. 예로, 4 → 4x4 = 16 → 1x1 + 6..
피보나치 수에 대한 문제입니다. 피보나치 수는 아래와 같이 정의됩니다. f(1) = 1 f(2) = 2 f(3) = f(1) + f(2) = 1 + 2 = 3 f(4) = f(2) + f(3) = 2 + 3 = 5 f(5) = f(3) + f(4) = 3 + 5 = 8 ... f(n) = f(n-2) + f(n-1), n>=3 a와 b라는 두 수가 주어져 있을 때 두 수 사이에는 몇 개의 피보나치 수가 있을까요? 예를 들어 10과 100 사이에는 총 5개(13, 21, 34, 55, 89)의 피보나치 수가 있고 모두 더한 값은 212입니다. 12345678999과 99987654321 사이에도 몇 개의 피보나치 수가 있습니다. 이 구간 내의 모든 피보나치 수를 더한 값이 기념품을 받을 수 있는 열쇠입니다..
2학년때 정수론 배울때 잠깐 언급됬던 골드바흐 추측 에라토스테네스 체를 활용한 문제였다. 주어진 n의 max값이 1000000이기 때문에 접근할때 for문을 두개 돌려버리면 당연히 시간초과가 날 것 같았다. (실제로 시간초과가 났다) 그래서 algorithm stl에 들어있는 binary_search를 활용했다. 처음에 에라토스테네스의 체를 초기화해줄때 소수의 개수를 셌는데, 78498개나 나왔다. 어차피 배열에 저장할때는 오름차순으로 정렬이 되니, 정렬되어 있는 배열에서 이진탐색으로 찾으면 빠를거라고 예상했다. 찾기만 하면 나머지 수는 입력된 수에서 빼면 된다. 다른분의 숏코딩을 보니 문제에서 골드바흐 추측을 벗어나는 문제는 없었다. 이럴거면 나도 중간에 조건문 쓰지 말껄이라는 후회는 들긴 한다. 그리..
너무 어렵게 접근했던 문제이다. 뇌가 처음에는 너무 꼬여서 양수만 있을때, 음수있을때, 음수랑 0만 있을때, 0과 양수만 있을때 하나의 vector 컨테이너에서 조건문을 10개 이상 만들면서 처리를 하려고 했다. 너무 복잡해지자 이걸 어떻게 효율적으로 처리할까 고민하다가 양수와 음수를 따로 받는 방법을 생각하게 되었다. 1은 수를 묶을때 의미가 없다. 예를 들어 1 + 3 은 1 * 3 보다 무조건 크기 때문에 1이 들어올때는 바로 결과물을 담는 컨테이너에 담아주면 된다. 양수와 음수는 서로 묶어주지만 각 벡터의 개수가 홀수인지, 양수인지 구분해주면 된다. #include #include #include #define endl '\n' using namespace std; int n, cumsum; ve..
ascii 코드를 이용해서 잘 변환시키는게 중요했던 문제 처음에 알파벳 변환은 'A'의 아스키 값인 65를 빼주면 되고, 숫자를 임시적으로 문자열로 저장했을 때, 이를 다시 숫자로 변환할때는 0의 아스키 값인 48을 빼주면 된다. #include #define endl '\n' using namespace std; int alphabet[] = { 3, 2, 1, 2, 3, 3, 2, 3, 3, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1 }; string s1, s2; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> s1; cin >> s2; string..
dp 시작 #include #define endl '\n' using namespace std; long long dp[85]; int n; int main() { cin >> n; dp[0] = 0; dp[1] = 1; for (int i = 2; i
소인수를 구하는 다양한 방법이 있지만 효율적인 알고리즘을 위해서라면 O(n) 시간 안에 구하는 것이 최적인 것 같다. 에라토스테네스 체에서 영감을 얻어 나누어 떨어질때 수를 나누어주면 해결될 것 같다. '''어떤 수를 소수의 곱으로만 나타내는 것을 소인수분해라 하고, 이 소수들을 그 수의 소인수라고 합니다. 예를 들면 13195의 소인수는 5, 7, 13, 29 입니다. 600851475143의 소인수 중에서 가장 큰 수를 구하세요. ''' num = 600851475143 denom = 2 target = [] while num > 0: if num % denom == 0: num /= denom target.append(denom) elif num == 1: break else: denom += 1 ..

1부터 5까지의 수를 영어로 쓰면 one, two, three, four, five 이고,각 단어의 길이를 더하면 3 + 3 + 5 + 4 + 4 = 19 이므로 사용된 글자는 모두 19개입니다. 1부터 1,000까지 영어로 썼을 때는 모두 몇 개의 글자를 사용해야 할까요? 참고: 빈 칸이나 하이픈('-')은 셈에서 제외하며, 단어 사이의 and 는 셈에 넣습니다. 예를 들어 342를 영어로 쓰면 three hundred and forty-two 가 되어서 23 글자, 115 = one hundred and fifteen 의 경우에는 20 글자가 됩니다. 프로젝트 오일러는 문제를 푼 사람만 입장 가능한 포럼이라는 곳이 존재하는데, 거기 있는 코드들을 보고 깜짝 놀랐다. 처음에는 selenium으로 htt..