목록PARK/ALGORITHM TIPS (3)
DY N DY
이름은 사실 거창하지만... 사실 크게 어려울 것은 없다.사실 여기 쓰는 모든게 그렇지만 혼자 알아낸것이라기 보다는... 배운 것이므로 배우고나면 어렵진 않다. 스스로 생각해내기는 참 어려울 것 같지만.. 우선 이 최적화를 하기 전에는 당연히 선행되어야 할 것이알고리즘은 완벽하게 구현한 후에 실행하여야 할 것이다. 모두 구현이 끝난 후에 어떻게하면 조금 더 빠르게 할까..? 생각하면서 하나하나 최적화해나갈 때 필요한 지식이다.익숙하지 않을 때 처음부터 이런걸 고려한다면 알고리즘 구현도 벅찰수 있을 것 같다.. 또한 사실 전체 프로그램에서 아래와 같은 것들이 100번이나 1000번정도만 사용된다면 사실 그다지 프로그램의 실행속도향상은 없을 것이다. 하지만 모으고 모으고 모아서... 100만번 정도의 연산을..
보통 C, C++에서 입력 출력을 받을 때 printf, scanf보다 cout, cin이 편하기 때문에(개인적으로 그럴지도...) 처음에는 cout, cin을 사용하였으나 printf, scanf에 비해 cout, cin(endl)은 상당히 느리다. 이와 같은 현상에도 불구하고 cin, cout을 사용하고 싶다면std::ios::sync_with_stdio(false)를 코드 초반부에 적어준 후에 cin, cout을 사용한다면 printf, scanf만큼 빠른 사용이 가능해진다. cin, cout이 C 라이브러리에서 stdio buffer와 싱크를 맞추다 보니 느려진다고 한다.특히 endl같은 경우 위의 싱크와 상관없이 느린 출력의 주범이 된다고 하여 요즘에는 주로 printf, scanf를 사용한다.
JAVA, C, C++ 공통 대단한 알고리즘 노하우나 팁은 아니지만 실수를 방지할 수 있고 약간의 팁이라고 할 수 있어서 하나씩 정리.. 보통 알고리즘 문제에서는 배열을 사용하기 마련이다. 알고리즘 문제를 풀 때 만약 입력값이 2000개 들어온다고 하면 int a[2000] 이런식으로 잡는데 사실 문제는 없지만 보통은 1부터 2000까지가 0부터 1999까지보다 편하게 느껴질 것이다. 때문에 보통은 2000개 들어온다고 한다면 int a[2001] 이런식으로 잡거나 사실 메모리 조금 더 쓰는것이 문제가 틀리는 것 보다 낫다고 생각하기 때문에 보통 int a[2222] 등 넉넉하게 잡는다. 이렇게 잡으면 for loop를 돌 때기존에 for(int i = 0; i < 2000; ++i) 등으로 사용하던 것..