본문 바로가기

코딩 -/백준 알고리즘 해설

백준 알고리즘 단계별 문제풀이 3 . for문 , X보다 작은 수 (백준 10871번)

반응형

백준 알고리즘 문제의 단계별 문제의 3번. for문 파트입니다.

 

 <출처 - 백준 알고리즘 문제 - 단계별 문제풀이 for 파트 11번 >

몇개를 받을지를 받고 , 그리고 몇보다 작은 수를 출력할지를 받고,

그 다음 그 갯수만큼 입력이 들어옵니다.

 

C언어입니다.

#include<stdio.h>

int main(){
    int n, cri, temp;
    scanf("%d %d",&n,&cri);
    for (int i=0;i<n;i++){
    	scanf("%d",&temp);
		if (cri>temp){
        	    printf("%d ",temp);
        }
    }
}

 

 

C++입니다. 

#include <iostream>
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
	int N, X, temp;
    cin>>N>>X;
    for (int i=0;i<N;i++){
    	cin>>temp;
        if(temp<X){
        	cout<<temp<<" ";
        }
    }
}

 

 

 

python입니다

파이썬의경우 파이썬이 제공하는 편리함이  가끔은 더 돌아가게 만들기도합니다..

파이썬이 제일 어렵네요.

 

그리고 파이썬 print 의 경우 마지막 '\n'이 자동으로 포함되어있습니다

줄바꿈 없이 print를 하는 방법은

print("{} ".format(i),end="")

end="" 이라는게 마지막 \n 대신 "" 으로 처리하겠다입니다.

 

파이썬 한 줄에 여러숫자 받는법

인풋에 "1 2 3" 띄어쓰기를 통해 구분된 숫자들이 들어온다면 C언어나 다른언어는 스캔을 여러번 받으면 되지만 파이썬은 줄단위 인식이기때문에 파이썬은 한 줄에 여러 숫자를 한번에 받을 수 없습니다.

 

이를 해결하는 방법입니다.

sys.tedin.readline()은  input()과 같은 기능이나, 입력을 받는 속도가 빠릅니다 . 편하신대로 input()으로 대체해도됩니다.

 

 

X=sys.stdin.readline()
N,X = X.split()
N = int(N)
X = int(X)

temp = sys.stdin.readline()
templist = temp.split()

 

두가지 방법이있습니다. 

1번째

갯수를 미리 알고있을때

x,y,z=input().split()

또는 임시변수를 준다

temp = input()

x,y,z = temp.split()

 

 

2번째 갯수를 모를때

temp = input()

templist = temp.split()

 

temp 라는 스트링 변수에 받아 공백을 기준으로 쪼갠 각 숫자들을 templist라는 리스트에 넣는것입니다.

이는 해당 리스트를 for문으로 취급하며 각각의 요소를 int()화 해줘야합니다.

 

 

 

처음 X,N 은 split 으로 스트링타입 변수를 두개로 쪼개주고 다시 인트형으로 변환합니다

 

또 숫자를 한번에 temp라는 스트링타입으로 입력받아

리스트로 쪼개어넣고 리스트의 숫자를 인트로 바꾸어 각각 X보다 작을때 출력합니다.

import sys

X=sys.stdin.readline()
N,X = X.split()
N = int(N)
X = int(X)

temp = sys.stdin.readline()
templist = temp.split()
for i in templist:
        i = int(i)
        if i<X:
                print("{} ".format(i),end="")

 

 

 

 

Java입니다. 

자바는 스트링토크니저를 입력하여 구했습니다. 자세한 사용법은 이전게시글에 있으니 참고하시기바랍니다.

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

public class Main {

	public static void main(String args[]) throws Exception {
		
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer temp;
        int X,N, input;
        temp = new StringTokenizer(br.readLine());	//X,N 을 입력받는다
        N = Integer.parseInt(temp.nextToken());
        X = Integer.parseInt(temp.nextToken());
        
        
        temp = new StringTokenizer(br.readLine());
        
        for(int i=0;i<N;i++){
            input = Integer.parseInt(temp.nextToken());
            if (input<X){
			bw.write(input+" ");
            }
		}
        bw.flush(); // 남아있는 데이터를 모두 출력
		bw.close(); //닫음
	}
}

 

이것으로 11번째 기본  for문 문제인 X보다 작은 수 였습니다.

 

반응형