728x90


기본 입력 함수


 

input()

  • 가장 기본적인 입력 함수입니다.
  • 개행 문자 이전까지의 1 line을 읽어옵니다. 
str = input()	#input : hello
print(str)	# output : hello

 

  • 특별히 형식을 정해주지 않으면 string 형식으로 저장함을 유의합니다.
  • 다른 형식으로 저장하고 싶다면 아래와 같이 형 변환을 거쳐 주면 됩니다. 
num = int(input())	#input : 3

 


split()

  • 만약에 input이 한 라인에 2개 이상이라면 어떻게 할까요?
  • split 메서드를 활용하면 공백을 기준으로 input을 쪼개어 리스트 형태로 반환해줍니다.
a, b = input().split()	#input : Hi there
print(a)	#Hi
print(b)	#there
  • 위처럼 split()에 인자를 넣지 않으면 기본으로 공백을 구분자로 인식합니다.
  • 아래와 같이 원하는 구분자를 인자로 넣어서 사용할 수도 있습니다.
    a, b = input().split('/')	#input : Hi/there/​

 


map()

  • split된 여러개의 input에 대하여 일괄적으로 형 변환을 할 때는 map을 사용합니다.
  • map의 기본 형식은 아래와 같습니다.
    • map('적용할 함수','순회 가능한 데이터')	//리턴은 map object
      python에서 map의 활용은 무궁무진하지만 여기서는 기본 입출력 방법만 다루겠습니다.
      map에 대한 더 자세한 내용은 아래의 포스트를 참고 해 주세요.
      -> 추가 예정
  • 여러개의 int 형 input을 받는 경우
    • #input : 1 2
      a, b = map(int, input().split())
  • 리스트 형태로 받고 싶은 경우
    • #input : 1 2 3 4 5
      a = list( map(int, input().split()) )
      map은 map object 형태를 반환하니 리스트로 변환해서 사용합니다. 

 


 

sys.stdin.readline()

  • 백준과 같은 채점 사이트에서 반복문으로 계속 입력값을 받는 문제에서 input()을 사용하면 시간초과를 받는 경우가 왕왕 있습니다.
  • 이럴 때는 sys.stdin.readline() 를 대신 사용합니다.

 

  • 헤더 파일
    • import sys

 

  • 기본적으로, input()과 사용 방법이 거의 동일합니다.
    • import sys
      
      #input : 1 2
      a, b = map(int, sys.stdin.readline().split())
  • 다만, input() 과 달리 개행문자(\n)까지 함께 입력 받으므로 주의합니다.
    • 개행문자를 제외하고 싶은 경우, rstrip 메서드를 사용합니다.
    • import sys
      
      #input : 'Hi there\n'
      str = sys.stdin.readline().rstrip()​

 


 

기본 출력 함수


 

print()

  • 가장 기본적으로 사용하는 출력 함수입니다.
  • print( value1, value2, ... , sep='구분자: 기본_공백', end='마지막 문자: 기본값_\n(개행)')
    ex.
    • name = 'Kim'
      id = 12345
      nex = '--->'
      
      print(name,id,sep='.',end=nex)
      print('next line is here')
      
      #output : Kim.12345--->next line is here
  • print() formatting 문서는 아래를 참고 해 주세요. ( 추가 예정 )

 

 

 

728x90

'언어 공부 > Python' 카테고리의 다른 글

[Python] 이스케이프 시퀀스 ( Escape Sequence )  (0) 2021.05.01
728x90


기본 입출력 함수


헤더 파일

#include <iostream>
  • 위의 헤더파일을 반드시 추가해야 사용 가능합니다.
  • cin,cout 모두 std 네임스페이스 내에 존재합니다.

 

 

참고로 아래의 코드를 추가하면 std:: 를 붙이지 않고도 사용할 수 있습니다.

 

 

1.전체 네임스페이스를 std로 선언하는 방식.

이는 추후에 문제가 생길 수 있는 방식이니 초반에만 사용하도록 합니다.

using namespace std;​

 

2. cin,cout에 대해서만 네임스페이스를 지정해주는 방식

이 방식이 좀 더 권장되는 방식입니다. 

(사실 귀찮아서.. 저는 1번도 자주 사용합니다.) 

using std::cin;
using std::cout;

 


std::cin 

 

#include <iostream>	

int main(){
	int num;	//변수 선언
	std::cin >> num;	//변수 입력
}
  • 가장 기본적인 cin의 활용 방식입니다.
  • 백준 저지의 경우라면 입력으로 보여주는 숫자들이 프로그램 흐름상 차례로 변수에 입력되게 됩니다.
  • >> 의 방향에 유의하도록 합시다. 저는 변수에게 집어넣는다고 연상해서 외웠습니다.

std::cout

#include <iostream>

int main(){
	int num;	//변수 선언
	std::cin >> num;	//변수 입력
	std::cout << num;	//변수 출력
}
  • 앞서 cin으로 값을 입력받은 num 변수를 출력하는 모습입니다.
  • cin과 화살표 방향이 반대임을 꼭 유의하도록 합니다.

 

 

-여러개의 변수를 한꺼번에 입출력 시

std::cin >> a >> b;
std::cout << a << b;
    •  너무 횟수가 늘어나는 경우에는 당연히 반복문 등을 활용하도록 합니다.

 

 

 


 

시간 제한 환경에서의 빠른 입출력


 

  • 무턱대고 cin과 cout을 쓰다 보면, 백준 저지등에서 시간초과가 날 수 있습니다. 속도가 아주 느리거든요.
  • 속도가 느린 이유는 저도 자세히는 설명이 어렵지만(잘 모름), 대체로 2가지로 추려볼 수 있습니다.
    1. 타 언어(C나 Java등)와 달리 입출력하는 데이터의 형식을 지정하지 않습니다.(데이터가 int인지, string인지..) 아주 편리하죠.
    2. iostream이 cstdio와 동일한 버퍼 시스템을 사용하기 때문에. (잘 이해가 되지 않으나 printf, scanf등을 모두 호출한다고 함)
  • 그런데, 느리다고 해서 나쁜 걸까?
    • 그렇지는 않습니다. 아래의 방식들은 시간 제한이 있는 코딩테스트 등의 특수한 상황에서의 대처법일 뿐입니다.
    • cin, cout이 나중에 나온 언어이니 만큼 안정성, 확장성 등에서는 더 뛰어나다고 합니다. 

 

 

1.  C의 입출력 사용하기

 

헤더파일

 

#include <stdio.h>	//C의 방식
#include <cstdio>	//C++의 방식
  • stdio.h와 cstdio는 namespace가 다르다곤 하지만.. 다들 취향껏 사용하시는 듯 하니 골라서 쓰시면 됩니다.

 

 

scanf

 

#include <cstdio>

int main()
{
	int num;
	scanf("%d",&num);	//입력
}
  • %d란 무엇일까요?  cin과 달리 printf는 입력받는 데이터의 형식을 지정해 주어야 합니다. 
  • 바로 그 데이터의 형식을 알려주는 문자를 형식지정자 라고 합니다. 
    • 형식지정자에 관해서는 아래의 페이지를 참고 해 주세요! (추가 예정)

 

  • 그렇다면 입력 받는 변수 앞에 &를 붙이는 이유는 무엇일까요? (참고로 &는 코딩 초기에 자주 까먹습니다. 유의하세요.)
  • C에서 포인터를 배웠다면 아시겠지만.. &를 변수 앞에 붙여주면 변수의 메모리 주소라는 의미입니다.
  • 여기서는 num의 메모리 주소로 가서 입력받은 int 데이터를 입력하라는 뜻으로 보면 되겠죠.

 

  • 한번에 여러개의 입력을 받을 때는 아래처럼 사용하면 됩니다.
scanf("%d %d %d",&a,&b,&c);

 


printf

 

#include <cstdio>

int main()
{
	int num;
	scanf("%d",&num);
	printf("%d",num);	//출력
}
  • scanf와 거의 동일한 모양입니다. 다만 변수 앞에 &가 붙지 않음을 유의하세요.
  • scanf와 달리 문자열과 함께 사용할 수 있습니다. 아래와 같습니다.
printf("%d 더하기 %d 는 %d 입니다.\n",a,b,a+b);

 


 

2.  버퍼 동기화 끊기 + untie 

 

버퍼 동기화 끊기

ios_base::sync_with_stdio(false);
  • 앞서 말한 cstdio와 iostream의 버퍼 동기화를 끊어줍니다.
  • 메인 함수 안, 가장 윗줄에 추가하여 사용합니다.
  • 다만, 이걸 사용한 경우에 cin,cout을 사용하면서 printf,scanf를 동시에 사용하는 것은 불가능하니 유의합시다.

 

untie

cin.tie(NULL);
  • cin과 cout의 tie를 풀어줌으로써 속도를 향샹시키는 방식입니다.
    • cin과 cout의 tie의 의미 : 서로의 IO작업 전에 자동으로 버퍼를 비웁니다.
  • 따라서 이 코드를 사용한 경우에는 수동으로 버퍼를 비워줘야 합니다. (대체로 코딩테스트에서는 잘 없음)
  • 마찬가지로 메인 함수 안, 가장 윗줄에 추가하여 사용합니다.

 

 

저는 개인적으로 애초에 아래의 형식을 기본으로 두고 사용하는 편입니다. (대체로 백준에서는 문제 없었음)

#include <iostream>

using namespace std;

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
    
	/*
	TODO
	*/

}

 

728x90

+ Recent posts