알고리즘 공부하기 (Step 1, 뭐 부터 어떻게 공부해야 하지?)

백준 사이트에서 공부를 시작하려고 하는데 추천 받은 문제 카테고리에 따라

입출력 - DP - 기타 - bfs,dfs - binary search - 분할 정복 - 그리디 - 완전탐색 순서로 풀어 보려고 한다.

이번 주말에 풀었던 입출력 문제들은 다음과 같다. (boj.kr/2557 형태로 검색!) 약 30문제, 5시간 정도 걸린 것 같다.
BOJ - 2557, 1000, 2558, 10950, 10951, 10952, 10953, 11021, 11022, 11718, 11719, 11720, 11721, 2741, 2742, 2739, 1924, 8393, 10818, 2438, 2439, 2440, 2441, 2442, 2445, 2522, 2446, 10991, 10992

 시간 여유가 없으면 힘들겠지만, 주말에 몰아서 문제들을 풀다보니 확실히 하루에 긴 시간을 투자해서 공부하는 것이 짧게 여러번 공부하는 것 보다 학습 효율이 좋은 것 같다. 실수 했던 부분이나 배운 부분을 바로 다음 문제에 활용 가능해서 기억 -> 체화로 넘어갈 수 있는 것 같다.

 또 더블 모니터를 활용하면 한쪽에 문제 한쪽에 코딩을 할 수 있어서 확실히 더 효율이 높은 것 같다.

문제번호

배운 사항 & 실수 한 부분

10951

cin.eof()를 활용하는 방법 https://takeknowledge.tistory.com/20

[주어진 테스트 케이스의 갯수 없이 입력이 끝날 때 까지 받아야 하는경우, cin.eof()==true 일때 까지 받아준다.]

string 입,출력 https://giantpark197cm.tistory.com/142

[string s; getline(cin, s);]

11720

char를 받은 후, char값에서 -’0’을 처리해줘서 값을 만들기.

11721

strlen(char) 활용. 끝이 null 값이라 배열의 길이와 상관 없이 활용할 수 있다.

대신 #include <string.h>

2741

for문을 활용해서 입,출력을 사용할 때 주의 사항

단순히 cin과 cout을 활용하면 입,출력 시간이 오래 걸리기 때문에 scanf나 printf를 활용하자. 또한 endl; 대신 개행문자(\n)을 활용하자.

혹은 https://www.acmicpc.net/problem/15552 를 참조하면, cin과 cout은 서로 입,출력이 묶여있어서 cin.tie(NULL)을 활용하면 입, 출력을 따로 활용 가능하여 속도 향상이 가능하다고 한다.

1924


scanf 로 두개의 변수를 받으려 할 때, scanf(%d, %d) 이런식으로 중간에 ,를 넣으면 안된다.

scanf(“%d %d”, &a, &,b);

10818

int형의 범위는 -21억~21억 정도로 생각하자. 숫자를 쉽게 읽기 위해서는 (1억은 0이 8개)

100,000,000 = 1억

2445

for loop의 variable scope 는 for loop 내부만.

2522

별찍기, 중심을 기준으로 대칭 구조는 for문의 step 을 활용해서 step 이 N일때 -1로 바꾸어 주면 쉽다.

2446

scanf()에는 뒤에 꼭 주소값을 넣어줘야 한다! “&a”

 

그럼 다음은 DP 이론을 정리하고, DP 문제를 풀어 봐야겠다.

DP - 1463, 11726, 11727, 9095, 10844, 11057, 2193, 9465, 2156, 11053, 11055, 11722, 11054, 1912, 2579, 1699, 2133, 9461, 2225, 2011, 11052

 

 

Reference : https://plzrun.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4PS-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0

+ Recent posts