링크 : https://www.acmicpc.net/problem/2557
문제
문제 풀이
간단한 입출력 문제다. C++이나 JAVA같은 경우는 풀이 방법이 여러가지가 존재하지만 파이썬은 알아봐도 print을 쓰는 한 가지만 존재하는 것 같다.
C++ 상세 풀이
C++에서는 입출력 방식이 여러 가지가 존재한다. 대표적으로 iostream, stdio.h, cstdio 헤더파일을 사용하는 방법이 존재한다.
메모리는 iostream이 가장 많이 차지한다. 그래서 후에 너무 많이 입출력을 받으면 기본적으로 stdio보다 느리다. 이를 해결하기 위해 C++ 표준 스트림과 C 표준 스트림의 동기화를 끊는 방식을 사용할 수 있다. 아래 코드에서 init 함수가 그 부분이며 백준에서 이를 다룬 문제가 있기 때문에 추후에 포스팅할 기회가 있을 것이다.
#include <iostream>
void init() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
}
int main() {
init();
std::cout << "Hello World!";
return 0;
}
Python 상세 풀이 (print 함수 뜯어보기)
파이썬은 고수준 언어라 print를 사용하는 방법밖에 존재하지 않는다. 대신 print 함수에 대해 조금 알아보자.
help 함수를 활용해 print 함수의 사용법을 볼 수 있다.
help(print)
[결과]
Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
생각 외로 print함수에 매개변수가 많이 존재하는 것을 알 수 있다. 차근차근 알아보자.
sep, end
sep은 각 문자 사이에 무엇이 들어갈지를 정한다.
end는 문장 맨 끝에 무엇이 들어갈지를 정한다. 실습을 하면 직관적으로 이해할 수 있다.
print("안녕", "하세", "요", sep="__", end="--")
[결과]
안녕__하세__요--
file
file은 생각 외로 간단하다. print함수는 기본적으로 출력 스트림으로 보내는 기능을 하지만 file이라는 키워드 인자에 write(string) 메서드가 포함된 파일 객체를 설정해주면 파일에 내용을 쓰는 것도 가능해진다. 파일 입출력 시간에 배울 기회가 있다.
flush
flush는 무엇일까? 공식 문서에 따르면 flush를 True로 설정하면 스트림이 강제로 flush(clear)된다고 한다.
이는 print() 함수의 출력값이 버퍼에 올라간 상태일 때 flush를 True로 설정해주면 버퍼에 올라간 출력값을 바로 출력할 수 있다는 것을 말한다.
직접 실험해보자. flush가 되는지 확인하기 위해 time 모듈을 import해 0.5초간 일시정지하도록 하자.
신기하게! 0.5초 간격으로 0부터 4까지 출력되는 것을 볼 수 있다.
그런데 문제가 있다. flush 인자를 주지 않으면 기본값이 false이고, end를 공백으로 처리하면 버퍼에 올라간 상태라 바로 출력되지 않아야 하는데 직접 실행해보면 출력되는 것을 볼 수 있다. (\n은 바로 flush된다.)
뭘까 해서 인터넷을 뒤져보니 코드 실행환경에 따라 다를 수 있다 하여 터미널에서 실행해보았더니 정상적으로 실행된다.
코드 전문
C++
Python
참고
https://velog.io/@janeljs/python-print-sep-end-file-flush
소감
파이썬의 print함수에 대해 공부하느라 생각보다 굉장히 시간이 많이 걸렸다. 그래도 시간을 쓴 만큼 좋은 지식을 얻어갈 수 있었다. 코드를 빌드하는 환경도 굉장히 중요하다는 것을 알게 되었다!
'◎ 자료구조와 알고리즘 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 / BOJ] 1000번 A+B (C++, Python) (부제 : map(int, input().split())에 대하여) (0) | 2022.08.31 |
---|---|
[백준 / BOJ] 10718번 We love kriii (C++, Python) (0) | 2022.08.30 |
[백준 / BOJ] 9184번 신나는 함수 실행 (C++, Python) (0) | 2022.08.12 |
[백준 / BOJ] 24416번 알고리즘 수업 - 피보나치 수 1 (C++, Python) (0) | 2022.08.11 |
[백준 / BOJ] 2580번 스도쿠 (C++, Python) (0) | 2022.08.07 |
자기계발 블로그