케이스윔의 개발 블로그

[TIP] 기억해두면 좋은 C/C++ 알고리즘 풀이팁 본문

Algorithm

[TIP] 기억해두면 좋은 C/C++ 알고리즘 풀이팁

kswim 2018. 11. 14. 13:39

사실 팁이라고 하기에는 거창하지만 제가 자료구조, 알고리즘 관련 문제들을 풀다 보며 기억해두면 좋을 것 같은 내용을 기록하고 남겨두는 글입니다. 계속 수정을 통해 업데이트해나가도록 하겠습니다!


  • printf("%*d", 출력폭, 변수); 미리 특정 숫자가 아닌 계산하는 결과에 따라 출력하고자 하는 변수의 출력 폭을 지정할 수 있습니다.
  • priority_queue 에서는 pop()은 반환값이 없기 때문에 empty()로 잘 체크해줘야 합니다. 체크를 안 해주고 반복문에서 사용할 경우(VS환경에서는 컴파일 시 에러가 나서 확인가능) 백준 온라인 저지와 같은 사이트에서 히든케이스로 존재할 경우 무한루프에 빠지고 시간초과가 납니다. 또한 비어있을 때 top()은 어떤 값을 return 할지 모르기 때문에 우연히 예제케이스를 맞출 수 있으므로 체크를 꼭 해줘야 합니다!
  • C++로 풀어도 scanf와 printf를 통해서 입출력해줍니다. 속도가 빠르기 때문에!(너무 당연하지만..) cin이나 cout은 사실 보기만 해도 입력타입을 명시 안 입력해주니까 오래 걸릴 것 같다는 걸 알 수 있습니다. 사실 연습할 때는 cin, cout이 편해서 거의 사용하는데 입출력때문에 시간초과가 나는 경우를 방금 겪어보고 연습할 때도 scanf, printf를 사용하기로*^^* (endl은 버퍼를 비워주는 작업까지 하므로 cout을 사용할 때 endl 대신에 '\n'으로 바꿔주는 걸로도 상당히 시간을 줄일 수 있다고 합니다.)
  • string 타입을 printf("%s", str) 해주면 이상하게 출력됩니다.(printf는 C의 표준출력함수인데 C에서는 string을 사용할 수 없습니다.) str.c_str() 을 통해서 string-> char* 변환을 해주면 됩니다. 
  • string 타입은 위와 마찬가지로 C에서는 string 자료형을 지원하지 않기 때문에 scanf에서도 %s로 입력받을 수 없습니다. string을 입력받을 때는 cin을 사용해야합니다.
  • 시간초과가 나지 않도록 구현하기 위해서는 시간을 보고 대략적인 연산횟수를 계산해봅니다. 대략 1초에 간단한 연산을 1억번 정도 가능하다고 가정하고 계산을 해봅니다.


Comments