몇 개 입력받을 지 모를때

함수, 메서드를 작성할 때 대부분의 경우 매개변수의 개수를 명확히 지정해준다.

하지만 때로는 내가 작성한 함수의 인자로 몇 개가 입력될지 모를 때가 있다.

그럴 때는 매개변수에 *를 붙이면 여러 개의 입력값(인자)을 하나의 튜플로 받을 수 있다.

이러한 함수를 가변인자함수라고한다.

def print_animal(*args):	
    for name in args:				#for문을 이용해 튜플의 모든 내용 출력
        print(name,end=' ');

    print();

print_animal('dog','cat','lion');	#튜플('dog','cat','lion')를 인자로 전달
print_animal('tiger','cat');		#튜플('tiger','cat')를 인자로 전달

>>dog cat lion 
>>tiger cat 

(*매개변수)를 마지막에만 작성해주면 그 앞에 다른 매개변수를 포함해도 함수는 정상적으로 작동된다.

def print_animal(num,*args):
    print(num,end=' ');
    for name in args:
        print(name,end=' ');

    print();

print_animal(3,'dog','cat','lion');
print_animal(2,'tiger','cat');

>>3 dog cat lion 
>>2 tiger cat 

위의 예제에서는 함수의 인자를 위치 인자(Positional arguments)로 전달했지만 아래와 같이 키워드 인자(keyword arguments)를 전달받는 가변인자함수도 생성이 가능하다.

def print_animal(**kwargs):		# 매개변수의 이름앞에(**)를 붙여준다.
   print(kwargs)			#딕셔너리 형태로 전달받는다.
   for x in kwargs:
       print(kwargs[x])

print_animal(a='cat',b='dog',c='lion')

>>{'a': 'cat', 'b': 'dog', 'c': 'lion'}	#딕셔너리 형태로 전달받는다.
>>cat
>>dog
>>lion

위의 두 예시를 함께 사용할 수도 있다.

단, 위치 인자가 키워드 인자보다 항상 앞에 위치해야 된다.

def print_animal(*args,**kwargs):
    print(args)
    print(kwargs)
  

print_animal('tiger','rabbit',a='cat',b='dog',c='lion')

>>('tiger', 'rabbit')
>>{'a': 'cat', 'b': 'dog', 'c': 'lion'}

점프 투 파이썬 00장 들어가기 전에 00-1 머리말 00-2 저자소개 00-3 주요변경이력 00-4 책 구입 안내 01장 파이썬이란 무엇인가? 01-1 파이썬이란? 01-2 파이썬의 특징 01-3 파이썬으로 무엇을 할 수 있을까? 01-4 파이썬 설치하기 01-5 파이썬 둘러보기 01-6 파이썬과 에디터 02장 파이썬 프로그래밍의 기초, 자료형 02-1 숫자형 02-2 문자열 자료형 02-3 리스트 자료형 02-4 튜플 자료형 02-5 딕셔너리 자료형 02-6 집합 자료형 02-7 불 자료형 02-8 자료형의 값을 저장하는 공간, 변수 02장 연습문제 03장 프로그램의 구조를 쌓는다! 제어문 03-1 if문 03-2 while문 03-3 for문 03장 연습문제 04장 프로그램의 입력과 출력은 어떻게 해야 할까? 04-1 함수 04-2 사용자 입력과 출력 04-3 파일 읽고 쓰기 04장 연습문제 05장 파이썬 날개달기 05-1 클래스 05-2 모듈 05-3 패키지 05-4 예외 처리 05-5 내장 함수 05-6 라이브러리 05장 연습문제 06장 파이썬 프로그래밍, 어떻게 시작해야 할까? 06-1 내가 프로그램을 만들 수 있을까? 06-2 3과 5의 배수 합하기 06-3 게시판 페이징하기 06-4 간단한 메모장 만들기 06-5 탭을 4개의 공백으로 바꾸기 06-6 하위 디렉터리 검색하기 06-7 파이보 06-8 코딩도장 07장 정규표현식 07-1 정규 표현식 살펴보기 07-2 정규 표현식 시작하기 07-3 강력한 정규 표현식의 세계로 08장 종합문제 09장 풀이 10장 마치며

문제나 개발을 하다보면 입력 받는 개수를 모를때 계속 입력을 받는 경우가 있다

while(true){

int input=sc.nextInt();

if(input!=0) {

System.out.println(input);

}

편한거 쓰면 된다.

do {

int input=sc.nextInt();

System.out.println(input);

if(input==0) {

eq=false;

}

}while(eq);

그럴때 이런식으로 while() 이나 do while() 쓰면 계속해서 입력을 받을 수 있다,

파게로그

콤퓨타 왕왕기초/PS

[백준 10951번] 입력 개수가 미정일 때

파게 2020. 10. 25. 18:01

문제 링크: 10951번 A+B - 4

https://www.acmicpc.net/problem/10951

C++의 경우, 테스트 케이스의 개수가 주어지지 않는 경우, cin.eof()를 이용하여 입력을 중단시킬 수 있다.

자바는 bufferedReader.readLine( )의 반환값이 null일 때 입력받기를 중단한다. Scanner를 이용할 경우에는 .hasNext( ) 메서드를 이용할 수 있다.

C++

아래와 같이 .eof( )를 이용할 수 있다.

#include <iostream>

using namespace std;

int main(void) {
    while (1) {
        int a, b;
        cin >> a >> b;
        if (cin.eof()) break; // cin.eof() returns true if eof
        cout << a+b << '\n';
    }

    return 0;
}

아래와 같이 보다 간결하게 작성할 수 있다.

#include <iostream>

using namespace std;

int main() {
	int a, b;
	while (cin >> a >> b) {
		cout << a + b << '\n';
	}

	return 0;
}

Java

BufferedReader 이용

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = br.readLine()) != null) {
            StringTokenizer st = new StringTokenizer(line, " ");
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            sb.append(a+b).append('\n');
        }
        System.out.print(sb);
    }
}

Scanner 이용

import java.util.Scanner;

public class Main {
    public static void solution() {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            System.out.println(a+b);
        }
        sc.close();
    }
    
    public static void main(String[] args) {
        solution();
    }
}

Python

파이썬으로 PS를 제대로 해보지 않아서 잘 모르겠지만, 여러 코드를 살펴본 바 아래 코드 정도가 가장 정석적인 것이 아닐까 한다.

from sys import stdin

for line in stdin:
    print(sum(map(int, line.split())))