본문으로 바로가기
728x90

#1021

 

문제 설명   

1개의 단어를 입력받아 그대로 출력해보자.

입력

한 단어가 입력된다.(단, 단어의 길이는 50자 이하이다.)

문자를 50개 저장하기 위해서는 char data[51] 로 선언하면 된다.

char data[51]="";
scanf("%s", data);

를 실행하면, data[51] 에 한 단어가 저장된다.


출력

입력된 단어를 그대로 출력한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.Scanner;
 
public class Main {
 
    public static void main(String args[]) {
 
        Scanner sc = new Scanner(System.in);
 
        String s=sc.next();
        
        System.out.println(s);
        
    }
}
 
 

 

 

#1022

 

문제 설명   

공백 문자가 포함되어 있는 문장을 입력받고 그대로 출력하는 연습을 해보자.

예시
char data[2001];
fgets(data, 2000, stdin);
printf("%s", data);

위와 같이 실행하면 공백이 포함된 문장을 키보드(stdin)로 입력받아
최대 2000자까지 data[ ] 공간에 저장하고 출력할 수 있다.

%s 는 문자열(string, 실로 연결된 문자들. 문장)로 출력하라는 의미이다.

참고
fgets( ) 를 사용하면 공백문자가 포함되어잇는 문장을 입력받아 저장할 수 있다.
만약, 아래처럼
scanf("%s", ... ) 를 이용해 문장을 입력받으면, 첫 번째 단어까지만 저장된다.

char data[51] = ""; //최대 50문자까지 저장 가능
scanf("%s", data);


입력

공백이 포함되어 있는 한 문장이 입력된다.
단, 입력되는 문장은 여러 개의 단어로 구성되고, 엔터로 끝나며,
최대 길이는 2000 문자를 넘지 않는다.

출력

입력된 문장을 그대로 출력한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.Scanner;
 
public class Main {
 
    public static void main(String args[]) {
 
        Scanner sc = new Scanner(System.in);
 
        String s=sc.nextLine();
        
        System.out.println(s);
        
    }
}
 
 

 

 

#1023

 

문제 설명

실수 1개를 입력받아 정수 부분과 실수 부분으로 나누어 출력한다.

** 여러 가지 방법들로 해결할 수 있다.

만약 실수 부분이 0으로 시작하지 않는다면(예를 들어 1.000009)
scanf("%d.%d", &a, &b)도 하나의 방법이 될 수 있다.

입력

실수 1개가 입력된다.
(단, 입력값은 절댓값이 10000을 넘지 않으며, 소수점 이하 자릿수는 최대 6자리까지이고
0이 아닌 숫자로 시작한다.)


출력

첫 번째 줄에 정수 부분을, 두 번째 줄에 실수 부분을 출력한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Scanner;
 
public class Main {
 
    public static void main(String args[]) {
 
        Scanner sc = new Scanner(System.in);
 
        String s=sc.next();
        
        String list[]=s.split("[.]");
        
        System.out.println(list[0]);
        System.out.println(list[1]);
        
    }
}
 
 
 

#1024

 

문제 설명   

단어를 1개 입력받는다.

입력받은 단어(영어)의 각 문자를

한줄에 한 문자씩 분리해 출력한다.


참고
C언어에서는 문장을 저장하기 위해 특별한 방법을 사용하지 않고,
배열이라는 연속된 공간에 문자들을 연속으로 한 개씩 저장하는 방법을 사용한다.
단, 문자열(문자가 연속적으로 연결된 줄이라는 의미. 즉 문장)의 마지막임을 나타내기 위해
문자열의 마지막에 널(NULL) 문자라는 특별한 의미를 가지는 문자를 삽입해 문장임을 나타낸다.

널(NULL)은 영어 단어 자체의 의미로는, 아무런 가치가 없는 또는 아무것도 없는, 사용되지 않은 등의 의미를 가지는데,

문자로는 '\0', 아스키문자의 정수값은 0을 의미하며 NULL 로도 사용할 수 있다.

단어나 문장을 scanf("%s", ...); 로 입력받게 되면, 그 마지막에 널문자가 자동으로 입력되는 것이다.

그러므로, 본 문제는 그렇게 저장되어있는 영문자들을 한 개씩 순차적으로 검사해서,

문장의 마지막을 나타내는 널문자가 나올 때까지 모양을 만들어 출력하면 되는 것이다.

나중에 조건실행문, 반복문, 배열에 대해서 배우면 명확히 이해할 수 있게 된다.

printf("%s", ...); 는 결국, 저장되어있는 문자의 마지막까지, 즉 널문자가 나올 때까지 형식에 맞추어 출력해 주라는 의미를 가진다.


예시
char d[30]; //최대 30문자를 저장할 수 있는 저장 공간 준비. 마지막에 널문자 고려해야함
scanf("%s", d); //그 공간에 키보드로 입력된 내용을 저장. 단 공백이 있으면 거기까지만 입력됨.
for(i=0; d[i]!='\0'; i++) //저장된 내용을 하나하나씩 검사해서 널문자가 아닐 동안 아래 실행
{
   printf("\'%c\'", d[i]);
}

입력

단어(영어) 하나를 입력받는다.
(단, 단어의 길이는 20자 이하이다.)


출력

단어의 문자(영어)를 하나씩 나누어 한 줄에 한 개씩
' '로 묶어서 출력한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Scanner;
 
public class Main {
 
    public static void main(String args[]) {
 
        Scanner sc = new Scanner(System.in);
 
        String s=sc.next();
        char list[]=new char[s.length()];
        
        for(int i=0;i<s.length();i++) {
            list[i]=s.charAt(i);
        }
        
        for(char i:list) {
            System.out.println("'"+i+"'");
        }
        
    }
}
 
 

 

- 다른 풀이

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.Scanner;
 
public class Main{
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        
        String s=sc.next();
        String a[]=s.split("");
        
        for(int i=0;i<a.length;i++)
            System.out.println("'"+a[i]+"'");
        
    }
}
 
 

 

 

#1025

 

문제 설명   

다섯 자리의 정수 1개를 입력받아 각 자리별로 나누어 출력한다.

참고
scanf("%1d%1d%1d%1d%1d", &a, &b, &c, &d, &e);
를 사용하면 1개의 숫자로 각각 구분되어 저장된다.

예시
읽어들인 값을 적당히 바꿔 출력하기 위해서

printf("[%d]", a*10000);

과 같은 방법도 가능하다.

입력

다섯 자리로 이루어진 1개의 정수를 입력받는다.
(단, 10,000 <= 입력받는 수 <= 99,999 )


출력

각 자리의 숫자를 분리해 한 줄에 하나씩 [ ]속에 넣어 출력한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.Scanner;
 
public class Main {
 
    public static void main(String args[]) {
 
        Scanner sc = new Scanner(System.in);
 
        String s=sc.next();
        
        int ans[]=new int[s.length()];
        
        for(int i=0;i<s.length();i++) {
            ans[i]=s.charAt(i)-'0';
        }
        //char-'0'을 이용하면 아스키코드값을 알 필요없이 int형으로 변환이 가능하다.
        
        
        System.out.println("["+ans[0]*10000+"]");
        System.out.println("["+ans[1]*1000+"]");
        System.out.println("["+ans[2]*100+"]");
        System.out.println("["+ans[3]*10+"]");
        System.out.println("["+ans[4]+"]");
        
        
        
    }
}
 

 

#1026

 

문제 설명   

입력되는 시:분:초 에서 분만 출력해보자.

참고
int h, m, s;
scanf("%d:%d:%d", &h, &m, &s);

를 실행하면 콜론을 사이에 둔 형식으로 입력되어, h, m, s에 각각 정수값만 저장된다.

입력

시 분 초가
시:분:초 형식으로 입력된다.


출력

분만 출력한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.Scanner;
 
public class Main {
 
    public static void main(String args[]) {
 
        Scanner sc = new Scanner(System.in);
 
        String s = sc.next();
 
        String list[] = s.split(":");
        
        
        //주소값을 비교할때는 "=="
        //내용값을 비교할때는 equals()
        if (list[1].equals("00"))
            System.out.println("0");
        else
            System.out.println(list[1]);
 
    }
}
 
 
 

#1027

 

문제 설명   

년월일을 출력하는 방법은 나라마다, 형식마다 조금씩 다르다.

년월일(yyyy.mm.dd)를 입력받아,

일월년(dd-mm-yyyy)로 출력해보자.

(단, 한 자리 일/월은 0을 붙여 두자리로, 년도도 0을 붙여 네자리로 출력한다.) 


참고
출력하는 자리수를 지정하기 위해 %4d와 같은 형식을 사용할 수 있는데,
빈칸을 0으로 출력하기 위해서는 %04d와 같은 형식을 사용하면 된다.

예시
printf("%02d-%02d-%04d", d, m, y);

입력

년월일이 '.'(닷)으로 구분되어 입력된다.


출력

년월일을

일월년으로 바꾸어 '-'(대쉬, 마이너스)로 구분해 출력한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Scanner;
 
public class Main {
 
    public static void main(String args[]) {
 
        Scanner sc = new Scanner(System.in);
 
        String s = sc.next();
        
        s=s.replace('.''-');
        
        String list[]=s.split("-");
        
        System.out.print(list[2]+"-"+list[1]+"-"+list[0]);
        
        
 
 
    }
}
 
 

 

 

#1028

 

문제 설명   

정수 1개를 입력받아 그대로 출력해보자.
(단, 입력되는 정수의 범위는 0 ~ 4,294,967,295 이다.)

참고
-2147483648 ~ +2147483647 범위의 정수를 저장하고 처리하기 위해서는
int 형으로 변수를 선언하면 된다.(int 로 선언하고 %d로 받고 출력)

하지만 이 범위를 넘어가는 정수를 저장하기 위해서는
보다 큰 범위를 저장할 수 있는 다른 데이터형을 사용해야 정상적으로 저장시킬 수 있다.

unsigned int 데이터형을 사용하면 0 ~ 4294967295 범위의 정수를 저장할 수 있다.


예시
unsigned int n;
scanf("%u", &n);
printf("%u", n);

입력

정수 1개가 입력된다.
(단, 입력되는 정수의 범위는 0 ~ 4294967295 이다.)


출력

입력된 정수를 그대로 출력한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Scanner;
 
public class Main {
 
    public static void main(String args[]) {
 
        Scanner sc = new Scanner(System.in);
 
        //자바에는 unsigned int가 존재하지 않는다.
        //따라서 범위가 더 큰 long을 이용한다.
        long n=sc.nextLong();
        
        System.out.println(n);
        
 
    }
}
 
 

 

#1029

 

문제 설명   

실수 1개를 입력받아 그대로 출력해보자.
(단, 입력되는 실수의 범위는 +- 1.7*10-308 ~ +- 1.7*10308 이다.)

참고
float 데이터형을 사용하면 +- 3.4*10-38 ~ +- 3.4*1038 범위의 실수를 저장할 수 있다.
(float 로 선언하고 %f로 입력 받아 출력하면 된다.)

이 범위를 넘어가는(더 작거나 더 큰) 실수를 저장하기 위해서는
보다 큰 범위를 저장할 수 있는 다른 데이터형을 사용해야 정상적으로 저장시킬 수 있다.
double은 더 정확하게 저장할 수 있지만, float보다 2배의 저장 공간이 필요하다.

double 데이터형을 사용하면
+- 1.7*10-308 ~ +- 1.7*10308 범위의 실수를 저장할 수 있다.


예시
double d;
scanf("%lf", &d); // double(long float) 형식으로 입력
printf("%lf", d);

입력

소수점 아래 숫자가 11개 이하인 실수 1개가 입력된다.
(단, 입력되는 실수의 범위는 +- 1.7*10-308 ~ +- 1.7*10308 이다.)


출력

입력된 실수를 소수점 이하 11자리까지 반올림하여 출력한다.


참고
%.11lf 를 사용하면 소수점 이하 11자리까지 출력된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.Scanner;
 
public class Main {
 
    public static void main(String args[]) {
 
        Scanner sc = new Scanner(System.in);
 
        double d=sc.nextDouble();
        
        System.out.println(String.format("%.011f",d));
        //소수자리수 11자리로 맞추기 & 실수형식이므로 f
 
    }
}
 
 

 

 

#1030

 

문제 설명   

정수 1개를 입력받아 그대로 출력해보자.
단, 입력되는 정수의 범위는
-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 이다.

참고
-2147483648 ~ +2147483647 범위의 정수를 저장하고 처리하기 위해서는
int 데이터형을 사용해 변수를 선언하면 된다.
(int 로 선언하고 %d로 입력받아 저장하고, 출력하면 된다.)

int 형으로 저장할 수 있는 범위를 넘어가는 정수 값을 저장하기 위해서는
보다 큰 범위를 저장할 수 있는 다른 데이터형을 사용해야 한다.

long long int 데이터형을 사용하면
-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 범위의 정수값을
저장시킬 수 있다.


예시
long long int n;
scanf("%lld", &n);
printf("%lld", n);

입력

정수 1개가 입력된다.
단, 입력되는 정수의 범위는 -9223372036854775808 ~ +9223372036854775807 이다.

출력

입력된 정수를 그대로 출력한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.Scanner;
 
public class Main {
 
    public static void main(String args[]) {
 
        Scanner sc = new Scanner(System.in);
 
        long n=sc.nextLong();
        
        System.out.println(n);
 
    }
}
 
 

 

 

 

 

728x90