입출력
실습을 원활하게 진행하기 위해서는 중간중간 출력을 해보기도 하고, 코드에 있는 변수를 수정하지 않고 외부의 입력을 받아서 써야 할때도 있다. 여기에서는 아주 간단한 입출력 방법을 설명하겠다.
출력
코드를 작성한 뒤 실행하면 코드가 돈다. 이때 코드 사이에 어떤 값을 출력하도록 하는 것이 가능하다. 지금은 출력한 결과물이 콘솔 창에 나타난다고만 이해하고 넘어가도 괜찮다. 출력은 다음의 상황에 매우 유용하다.
- 연산을 한 뒤 특정 변수에 어떤 값이 들어있는지 확인
- 조건문에서 어떤 분기를 타고 갔는지 확인
- 반복문 내부에서 일어난 일 확인
"""변수를 다음과 같이 확인할 수 있다.
"""
a, b = 1, 2
c = a + b
print(c) # 3
"""문자열 사이에 변수값을 같이 출력하고 싶을 수 있다.
파이썬에서는 fstring이라는 것을 사용할 수 있다. 문자열 앞에 `f`를 붙이고, 출력
하고 싶은 변수를 중괄호 안에 묶어서 쓴다.
"""
print(f"a is {a} and b is {b}, so a + b equals {c}.")
"""조건문을 다음과 같이 확인할 수 있다.
"""
x, y = 24, 42
if x > y:
print('x is larger than y')
else:
print('x is not larger than y')
"""반복문에 print를 넣어두면 반복문 내에서 일어나는 일을 쉽게 확인할 수 있다.
"""
s = 0
for i in range(10):
s += i
print(i, s) # 공백으로 구분된 두 변수가 출력된다.
# 출력 결과:
# 0 0
# 1 1
# 3 2
# 6 3
# 10 4
# 15 5
# 21 6
# 28 7
# 36 8
# 45 9
// 변수를 다음과 같이 확인할 수 있다.
let a = 1, b = 2;
let c = a + b;
console.log(c); // 3
// 문자열 사이에 변수값을 같이 출력하고 싶을 수 있다.
// 자바스크립트에서는 템플릿 리터럴(백틱 `)을 사용할 수 있다.
console.log(`a is ${a} and b is ${b}, so a + b equals ${c}.`);
// 조건문을 다음과 같이 확인할 수 있다.
let x = 24, y = 42;
if (x > y) {
console.log('x is larger than y');
} else {
console.log('x is not larger than y');
}
// 반복문에 console.log를 넣어두면 반복문 내에서 일어나는 일을 쉽게 확인할 수 있다.
let s = 0;
for (let i = 0; i < 10; i++) {
s += i;
console.log(i, s); // 공백으로 구분된 두 변수가 출력된다.
}
// 출력 결과:
// 0 0
// 1 1
// 2 3
// 3 6
// 4 10
// 5 15
// 6 21
// 7 28
// 8 36
// 9 45
// 변수를 다음과 같이 확인할 수 있다.
int a = 1, b = 2;
int c = a + b;
Console.WriteLine(c); // 3
// 문자열 사이에 변수값을 같이 출력하고 싶을 수 있다.
// C#에서는 문자열 보간($"...")을 사용할 수 있다.
Console.WriteLine($"a is {a} and b is {b}, so a + b equals {c}.");
// 조건문을 다음과 같이 확인할 수 있다.
int x = 24, y = 42;
if (x > y) {
Console.WriteLine("x is larger than y");
} else {
Console.WriteLine("x is not larger than y");
}
// 반복문에 Console.WriteLine을 넣어두면 반복문 내에서 일어나는 일을 쉽게 확인할 수 있다.
int s = 0;
for (int i = 0; i < 10; i++) {
s += i;
Console.WriteLine($"{i} {s}"); // 공백으로 구분된 두 변수가 출력된다.
}
// 출력 결과:
// 0 0
// 1 1
// 2 3
// 3 6
// 4 10
// 5 15
// 6 21
// 7 28
// 8 36
// 9 45
#include <iostream>
using namespace std;
// 변수를 다음과 같이 확인할 수 있다.
int a = 1, b = 2;
int c = a + b;
cout << c << endl; // 3
// 문자열 사이에 변수값을 같이 출력하고 싶을 수 있다.
cout << "a is " << a << " and b is " << b << ", so a + b equals " << c << "." << endl;
// 조건문을 다음과 같이 확인할 수 있다.
int x = 24, y = 42;
if (x > y) {
cout << "x is larger than y" << endl;
} else {
cout << "x is not larger than y" << endl;
}
// 반복문에 cout을 넣어두면 반복문 내에서 일어나는 일을 쉽게 확인할 수 있다.
int s = 0;
for (int i = 0; i < 10; i++) {
s += i;
cout << i << " " << s << endl; // 공백으로 구분된 두 변수가 출력된다.
}
// 출력 결과:
// 0 0
// 1 1
// 2 3
// 3 6
// 4 10
// 5 15
// 6 21
// 7 28
// 8 36
// 9 45
입력
많은 경우 출력까지만 할 줄 알아도 괜찮다. 하지만 콘솔 창을 통해 입력을 받거나 텍스트 파일을 불러와서 입력으로 사용하는 경우가 종종(...이라고 썼지만, 아마 알고리즘 문제를 푸는 경우 외에 볼 일이 많지는 않을 것이다.) 있으니니, 이를 위해 기본적인 입력 함수 사용법을 설명하도록 하겠다.
"""다음과 같이 직접 입력을 받을 수 있다.
"""
# 터미널 창에 문자열이 먼저 나오고, 이어서 사용자가 값을 입력한 뒤 엔터를 누른다.
a = input("첫 번째 수를 입력하세요: ")
b = input("두 번째 수를 입력하세요: ")
print(f'두 수의 합은 {a + b}입니다.') # fstring의 중괄호 안에서 연산을 할 수도 있다.
# 출력 예시:
# 첫 번째 수를 입력하세요: 1
# 두 번째 수를 입력하세요: 3
# 두 수의 합은 13입니다.
"""출력 예시가 뭔가 이상하다. 1 + 3 = 4가 되어야 하는데, 13이 되었다.
그 이유는, input함수를 통해 받아온 값은 문자열이기 때문이다. 참고로 input함수는 줄바꿈
(엔터를 치면 줄바꿈 문자가 입력된다)이 나오기 전까지의 값을 한 번에 문자열로 받아온다.
우리는 숫자로 계산을 하고 싶다. 그러므로 문자열로 들어온 값을 정수로 변환해주어야 한다.
"""
a = int(input("첫 번째 수를 입력하세요: "))
b = int(input("두 번째 수를 입력하세요: "))
print(f'두 수의 합은 {a + b}입니다.')
# 출력 예시:
# 첫 번째 수를 입력하세요: 1
# 두 번째 수를 입력하세요: 3
# 두 수의 합은 4입니다.
"""터미널 창에 직접 값을 입력하는 것이 번거로울 수 있다. 미리 입력할 값을 텍스트 파일로
저장해둔 뒤 이를 코드를 실행할때 입력으로 사용하는 것도 가능하다.
실습을 위해 파이썬 파일이 있는 폴더에 다음과 같은 텍스트 파일을 준비한다.
(data.txt)
1
3
"""
# 아래는 바로 위에서 사용한 것과 같은 코드다.
a = int(input("첫 번째 수를 입력하세요: "))
b = int(input("두 번째 수를 입력하세요: "))
print(f'두 수의 합은 {a + b}입니다.')
# 지금까지 터미널에서 `py test.py`로 코드를 작동시켰다면,
# 이번에는 `py test.py < test.txt`로 코드를 작동시켜보자.
# 만약 어떤 에러가 발생했다고 나오면 다음 항목에서 해결 방법을 알아보고 다시 돌아오자.
# 출력 예시:
# 첫 번째 수를 입력하세요: 두 번째 수를 입력하세요: 두 수의 합은 4입니다.
# 텍스트 파일에 있는 내용을 읽어서 입력으로 사용하기 때문에 사용자가 직접 값을 입력하거나
# 엔터를 누르지 않는다. 그래서 input 함수 안에 있는 문자열이 한 줄로 출력된다.
# 이를 방지하기 위해서 다음과 같이 코드를 수정하자.
a = int(input())
b = int(input())
print(f'두 수의 합은 {a + b}입니다.')
# 출력 예시:
# 두 수의 합은 4입니다.
"""종종 한 줄에 공백으로 구분된 숫자가 여럿 들어있을 수도 있다.
이번에는 실습을 위해 파이썬 파일이 있는 폴더에 다음과 같은 텍스트 파일을 준비한다.
(data-2.txt)
1 3
"""
# 다음의 두 함수에 대해 알아야 한다.
# - split 함수는 문자열을 특정 문자를 기준으로 잘라준다.
# - map 함수는 리스트 안에 있는 값들에 특정한 함수를 적용해준다.
# 이렇다는 개념만 숙지하고 다음의 코드를 보자.
a, b = map(int, input().split())
# 1. 여기서 split 함수 안에 아무 값도 넣지 않았는데, 그럴 경우 공백을 기준으로 문자를
# 잘라준다. 즉, 아래와 같은 일이 일어난다.
# '1 3'.split() -> ['1', '3']
# 2. map함수를 써서 각 값에 int함수를 적용했다. 이는 아래와 같이 작동한다.
# map(int, ['1', '3']) -> [int('1'), int('3')] -> [1, 3]
# 3. a, b에 리스트 안에 있는 값을 펼쳐서 넣어준다.
# a, b = [1, 3] -> a = 1이 되고, b = 3이 된다.
# 두 값을 더한 값은 다음과 같이 출력한다.
print(f'두 수의 합은 {a + b}입니다.')
# 출력 예시:
# 두 수의 합은 4입니다.
// node.js에서는 readline 모듈을 사용하여 입력을 받을 수 있다.
// 다음과 같이 직접 입력을 받을 수 있다.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question("첫 번째 수를 입력하세요: ", (a) => {
rl.question("두 번째 수를 입력하세요: ", (b) => {
// input으로 받아온 값은 문자열이므로 Number()로 변환해야 한다.
console.log(`두 수의 합은 ${Number(a) + Number(b)}입니다.`);
rl.close();
});
});
// 출력 예시:
// 첫 번째 수를 입력하세요: 1
// 두 번째 수를 입력하세요: 3
// 두 수의 합은 4입니다.
// 텍스트 파일에서 입력을 받을 때는 `node test.js < data.txt`로 실행한다.
// 파일에서 한 줄씩 읽어오는 방법은 다음과 같다.
const lines = [];
rl.on('line', (line) => {
lines.push(line);
});
rl.on('close', () => {
const a = Number(lines[0]);
const b = Number(lines[1]);
console.log(`두 수의 합은 ${a + b}입니다.`);
});
// 한 줄에 공백으로 구분된 숫자가 여럿 들어있는 경우:
// (data-2.txt)
// 1 3
rl.on('close', () => {
const [a, b] = lines[0].split(' ').map(Number);
console.log(`두 수의 합은 ${a + b}입니다.`);
});
// C#에서는 Console.ReadLine()을 사용하여 입력을 받을 수 있다.
// 다음과 같이 직접 입력을 받을 수 있다.
Console.Write("첫 번째 수를 입력하세요: ");
string inputA = Console.ReadLine();
Console.Write("두 번째 수를 입력하세요: ");
string inputB = Console.ReadLine();
// 입력으로 받아온 값은 문자열이므로 int.Parse()로 변환해야 한다.
int a = int.Parse(inputA);
int b = int.Parse(inputB);
Console.WriteLine($"두 수의 합은 {a + b}입니다.");
// 출력 예시:
// 첫 번째 수를 입력하세요: 1
// 두 번째 수를 입력하세요: 3
// 두 수의 합은 4입니다.
// 텍스트 파일에서 입력을 받을 때는 실행 파일 뒤에 < data.txt를 붙이면 된다.
// 파일에서 읽어오는 경우:
a = int.Parse(Console.ReadLine());
b = int.Parse(Console.ReadLine());
Console.WriteLine($"두 수의 합은 {a + b}입니다.");
// 한 줄에 공백으로 구분된 숫자가 여럿 들어있는 경우:
// (data-2.txt)
// 1 3
string[] parts = Console.ReadLine().Split(' ');
a = int.Parse(parts[0]);
b = int.Parse(parts[1]);
Console.WriteLine($"두 수의 합은 {a + b}입니다.");
#include <iostream>
using namespace std;
// C++에서는 cin을 사용하여 입력을 받을 수 있다.
// 다음과 같이 직접 입력을 받을 수 있다.
int a, b;
cout << "첫 번째 수를 입력하세요: ";
cin >> a;
cout << "두 번째 수를 입력하세요: ";
cin >> b;
// cin은 자동으로 타입에 맞게 변환해주므로 별도의 변환이 필요 없다.
cout << "두 수의 합은 " << a + b << "입니다." << endl;
// 출력 예시:
// 첫 번째 수를 입력하세요: 1
// 두 번째 수를 입력하세요: 3
// 두 수의 합은 4입니다.
// 텍스트 파일에서 입력을 받을 때는 실행 파일 뒤에 < data.txt를 붙이면 된다.
// 파일에서 읽어오는 경우에도 같은 코드를 사용하면 된다.
cin >> a >> b;
cout << "두 수의 합은 " << a + b << "입니다." << endl;
// 한 줄에 공백으로 구분된 숫자가 여럿 들어있는 경우에도
// cin은 공백을 기준으로 자동으로 값을 분리해주므로 같은 방식으로 사용하면 된다.
// (data-2.txt)
// 1 3
cin >> a >> b;
cout << "두 수의 합은 " << a + b << "입니다." << endl;
에러: '<' 연산자는 나중에 사용하도록 예약되어 있습니다
만약 터미널이 powershell이라면 작동하지 않을 수 있다. 이 경우 cmd 등의 기타 프로파일을 사용하면 되는데, 방법은 아래와 같다.
-
먼저 문제가 발생한 화면이다. 아래와 같은 에러 메세지가 뜬다.

-
표시된 화살표 버튼을 눌러서 다른 프로파일을 확인한다.
Command Prompt를 선택한다.
-
다시 기존의 실습을 이어서 진행한다. 잘 작동하는 것을 확인할 수 있다.
