❌ fflush(stdin), rewind(stdin) ❌

들어가면서

질문 게시판에 올라오는 C/C++ 코드 중 종종 fflush(stdin) 또는 rewind(stdin) 을 사용한 코드들이 올라옵니다.

결론부터 말하자면, 이런 문장을 쓰는 프로그램은 호환성이 없으며, 구현체가 달라지면 전혀 다른 행동을 할 수 있습니다.

위 두 문장은 Windows 운영체계에서 Microsoft Visual C++ (이후 MSVC)로 컴파일한 프로그램을 실행하고, stdin 이 키보드인 경우에만 원하는 동작을 하고, BOJ 의 채점 환경인 Linux 운영체계에서 GCC 또는 clang 로 컴파일한 프로그램을 실행하고, stdin 이 파일인 경우에는 전혀 다른 동작을 합니다. 이 두 함수의 원래 의미를 설명하는 것으로 글을 시작하겠습니다.

더 읽기댓글 쓰기

C++ 유용한 기능들

이 글은 유용한 기능들을 소개하는 글입니다. "요약 노트" 정도로 생각해주시면 될 것 같습니다. 그래서 구체적인 원리나 주의사항, 확장 가능성에 대한 이야기는 생략합니다. 의견은 언제든 환영이고, 앞으로도 이 글은 지속적으로 개선해나가겠습니다. 이 글은 C++의 기본 문법을 숙지했고, std::vectorstd::set 등을 사용해본 경험이 있는 분들이 읽기 적합합니다.

  • f, l은 앞 주소와 뒷 주소를 나타내고, 여러 개면 번호를 1부터 차례대로 붙였습니다. (f, l은 first와 last의 약자, [f, l)임에 유의하세요)
  • 비교기반 함수에 대해서는 비교 함수를 추가하는 것이 항상 가능하므로, 생략하였습니다. (e.g sort(f,l)가 있으면 sort(f,l,cmp)가 존재함)
  • max가 있으면 min도 있습니다.
  • 아래의 코드 형식을 기본으로 합니다. 4번 줄은 입출력 속도를 향상하는 구문입니다. 자세한 정보는 입력 속도 비교글, 출력 속도 비교글을 참고해주세요.
  • G++ 컴파일러, C++17 환경을 기준으로 작성했습니다. (G++은 대회에서 일반적으로 지원하는 컴파일러이고, C++17은 규모가 큰 대회들이 대부분 지원하는 언어이기 때문입니다. 아직 C++20을 지원하지 않는 대회도 종종 있기에 C++20에 새로 추가된 문법은 따로 표시해 두었습니다.)
#include <bits/stdc++.h>
using namespace std;
int main() {
    cin.tie(0)->sync_with_stdio(0);
}

입출력

더 읽기댓글 쓰기

Fast I/O 구현 코드

안녕하세요 jinhan814입니다. 제가 문제를 풀면서 자주 사용하는 FastIO 구현 코드를 공유하면 좋을 거 같아서 BOJ 블로그에 글을 작성해보았습니다.؜

(참고 : https://blog.naver.com/jinhan814/222266396476)

؜

더 읽기댓글 쓰기

알고리즘 문제풀이를 함에 있어서 자주 접하게 될 용어들

이런 약자들에 대해 다룬 글이 하나쯤은 있었을 것 같지만, 잘 나오지 않아서 정리해 보았습니다. 이런 종류의 글은 백준 블로그에 어울리지 않았을까 하는 생각이지만, 저도 처음 써보는 거라 이상한 점 있으시면 피드백 주세요^^

  • UPD: 지엽적인 용어들도 종종 있습니다. 처음 시작하시는 분들은 이 글의 모든 용어를 알 필요는 없다는 점 유의해주세요.

    OJ들 (Online Judge)

  • BOJ,백준: Baekjoon Online Judge
  • CF,코포: Codeforces
  • 앳코: Atcoder
  • USACO: USA Computing Olympiad
  • xOI: (지명) Olympiad in Informatics (ex. InternationalOI, BalticOI, KoreanOI, JpaneseOI,...)
  • ICPC: International Collegiate Programming Contest

기본 용어들

  • PS: Problem Solving (문제 풀이)
  • CP: Competitive Programming (경쟁 프로그래밍)
  • CS: Computer Science (컴퓨터 과학)
  • STL: Standard Template Library (표준 템플릿 라이브러리)
  • 맞왜틀: 맞는 것 같은데 왜 틀리지
  • 솔브드; 솔브닥: 백준과 떼놓을 수 없는 서비스. 접속해서 자세히 알아보세요.
  • 업솔빙; upsolving: 대회 때 못 푼 문제를 다시 풀어보는 과정. absorbing(흡수하다)이라는 의미도 내포함.
  • 예제: 문제에서 주어진 input과 output
  • 테케: 테스트 케이스의 약자로, 예제의 일반화. 조건을 만족한다면 다 통용해서 사용함.
  • 섭테: 서브 태스크의 약자로, 부분 문제를 뜻함. 각 부분 문제에는 조금씩 배점이 부여됨.
  • 올솔: All Solve! 다 풀어낸 경우
  • $\mathrm{w.l.o.g.}$: $\mathrm{Without\, Loss\, Of\, Generality}$의 약자. 일반성을 잃지 않는다는 뜻인데, 예를 들어 $a, b, c$ 세 수의 관계가 대칭적일 경우 $a\leq b\leq c$라고 순서를 강제하는 것이 있다.
  • $\mathrm{i.s.w.}$: $\mathrm{In\; the\; Same\; Way}$의 약자. 직역하면 같은 방식으로. 값만 바뀌고 동일한 구조를 유지하는 경우 똑같은 것을 또 쓰는 것을 막기 위함이다.
  • $\mathrm{s.t.}$: $\mathrm{such\; that}$의 약자. '다음을 만족하는' 이라는 뜻이다.
  • ∎: 증명 완료
  • $\mathrm{i.e.}$: $\mathrm{id\; est}$의 약자. 영어로는 that is 정도의 의미이다.
  • $\forall$: for all이라는 뜻. "모든 ~에 대해서"
  • $\exists$: exists라는 뜻. "~가 존재한다"

더 읽기댓글 쓰기

BOJ의 Good Bye, BOJ 2020!

12월 26일

2020년 12월 26일 토요일, 이 날은 BOJ에서 7개의 대회가 동시에 열린 날이었습니다. 이 날은 17시 23분부터 48분까지 채점 현황이 너무 느린 문제가 발생했습니다. 제출은 정상적으로 되지만, 제출 후에 바로 넘어가야하는 채점 현황 페이지가 열리지 않아 제출이 정상으로 되었는지 확인을 할 수 없는 문제가 있었습니다. 채점 현황이 너무 느려 채점이 약 5분 정도 밀려 결과를 볼 수 없었습니다.

지난 블로그: 2020년 7월 25일 서버 사고 이후 약 2달간 당시 사고를 재현해보고, 원인이 무엇이었는지, 각 원인이 어떤 연관 과정을 가졌는지 파악하는데 성공했습니다. 이후 일부 대비를 했지만, 원활한 대회 진행에 방해가 되는 현상은 피할 수 없었습니다.

더 읽기댓글 쓰기

BOJ의 2020년 마무리

안녕하세요.

2020년을 마무리하며 BOJ의 2020년을 정리해봤습니다.

먼저 올해는 BOJ의 10주년이었습니다. 10주년 기념으로 뭔가를 해보려고 했으나, 준비할 시간이 부족해 하지 못했었습니다. 10주년이 아니더라도 이벤트는 언제든 할 수 있으니 시간이 조금 나는대로 준비해보겠습니다.

더 읽기댓글 쓰기

2020-2021 ICPC 일정 정리

매년 문제를 업로드 하기 위해 캘린더에 정리하고 있는데, 올해는 미정이 많아 이곳에 정리합니다.

North America

더 읽기댓글 쓰기

2020년 11월 21일 서버 사고

안녕하세요.

오후 1시 56분경에 서버 사고가 발생했고, 오후 3시 7분에 복구되었습니다.

이 사고가 발생한 시기에 "2020 중앙대학교 프로그래밍 경진대회(CPC)"가 열리고 있었는데, 대회 운영에 문제를 일으켜 죄송합니다.

더 읽기댓글 쓰기

문제 출처 FAQ

공통

인터랙티브가 없던 시절에 업로드된 문제는 인터랙티브로 변환하지 않습니다.

문제는 서브태스크지만, 서브태스크가 아닌 상태로 업로드 될 수 있습니다.

더 읽기댓글 쓰기

채점하지 않는/못하는 언어

BOJ에는 언어가 2020년 10월 27일 기준으로 107개 추가되어 있으나, 그 중 일부는 채점을 지원하지 않습니다. 각 언어의 채점 지원 예정에 대해서 정리했습니다. 숫자만 써있는 것은 우선 순위입니다. 1이 가장 높고 6이 가장 낮습니다.

  • Ruby 1.8: 제출 불가, 재채점만 가능
  • C# 3.0: 제출 불가, 재채점만 가능
  • Haskell: 채점에 성공했으나 다시 실패. 1
  • Scala: 2
  • CoffeeScript: 6
  • VB.NET 2.0: 제출 불가, 재채점만 가능
  • Groovy: 5
  • Common Lisp: 4
  • Erlang: 2
  • Clojure: 3
  • Smalltalk: 5
  • SpiderMonkey: 6
  • Falcon: 6
  • Factor: 6
  • Perl6: 2
  • Dart: 2
  • Oz: 6
  • Alice: 6
  • Prolog: 5
  • Nemerle: 6
  • Nimrod: 6
  • Forth: 6
  • Julia: 3
  • Io: 6
  • Ruby 1.9: 제출 불가, 재채점만 가능
  • Ceylon: 6
  • FreeBASIC: 3 (2020년 10월 28일 추가)
  • Gosu: 5
  • C# 6.0 (.NET): 1 (2020년 11월 27일 추가)
  • Octave: 4
  • Go (gccgo): 1 (2020년 10월 28일 추가)
  • Cython: 2
  • SystemVerilog: 2 (2020년 10월 28일 추가)

더 읽기댓글 쓰기