[자바의정석] 4. 조건문과 반복문

갓김치·2020년 8월 2일
1

자바 문제풀이

목록 보기
3/6

1. 다음의 문장들을 조건식으로 표현하라

//1. int형 변수 x가 10보다 크고 20보다 작을 때 true
10 < x && x < 20

//2. char형 변수 ch가 공백이고 탭이 아닐 때 true
' ' == ch && ch != '\t'

//3. char형 변수 ch가 ‘x' 또는 ’X'일때 true
'x' == ch || ch == 'X'

//4. char형 변수 ch가 숫자(‘0’~‘9’)일 때 true
'0' <= ch && ch <= '9'

//5. char형 변수 ch가 영문자(대문자 또는 소문자)일 때 true
('A' <= ch && ch <= 'Z') || ('a' <= ch && ch <= 'z')

//6. int 형 변수 year가 400으로 나눠 떨어지거나 또는 4로 나눠 떨어지고 100으로 나눠 떨어지지 않을 때 true
year%400 == 0 || year%4 == 0 && year%100 != 0

//7. boolean형 변수 powerOn가 false일 때 true
!powerOn

//8. 문자열 참조변수 str이 “yes”일 때 true
"yes".equals(str) //str이 null일 수도 있으니 무조건 있는 "yes"를 앞에

2. 1부터 20까지의 정수 중에서 2 또는 3의 배수가 아닌 수의 총합을 구하시오.

int sum = 0;
for(int num = 1;num < 21;num++){
	if(num%2 != 0 && num%3 != 0){
    	sum += num;
    }
}

3. 1+(1+2)+(1+2+3)+(1+2+3+4)+...+(1+2+3+...+10)의 결과를 계산하시오.

//1 -> sum+=1
//1+(1+2) -> sum+=1 + sum+=2
//...
//1+(1+2)+...+(1+2+...+10)

int sum = 0;
int total = 0;

for(int num = 1;num < 11;num++){
    sum += num;
    total += sum;
}
//다른 풀이 - 디버깅해서 이해하기
int sum = 0;
for(int i = 1;i <= 10;i++){
	for(int j = 1; j <= i;j++){
    	    sum += j;
        }
}

4. 1+(-2)+3+(-4)+... 과 같은 식으로 계속 더해나갔을 때, 몇까지 더해야 총합이 100이상이 되는지 구하시오.

//방법1. 홀수: 더하기 / 짝수: 빼기
int sum = 0;
int num = 1;

while(true){
	if(num%2 != 0){
    	sum += num;
    }else{
    	sum -= num;
    }
    if(sum>=100){
    	System.out.println("num : "+num);
    	break;
    }
}
//방법2. 홀수: num / 짝수: num*-1 , 계속 더해나가기
int sum = 0;
int num - 1;

while(true){
	if(num%2 != 0){
    	sum += num;
    }else{
    	sum += num*-1;
    }
    if(sum>=100){
    	System.out.println("num : "+num);
        break;
    }
    num++;
}
//방법3. 방법2의 변형
//num *= -buho; 하고 sum += num; 하면
//num++할때 부호가 이상해짐
int num = 1;
int sum = 0;
int buho = 1;

while(true){
	if(num%2 != 0){
    	sum += num*buho;
    }else{
    	sum += num*buho;
    }
	sum += num;
    if(sum>=100){
    	System.out.println("num : "+num); 
    	break;
    }
    num++;
    buho *= -1;
}

5. 다음의 for문을 while문으로 변경하시오.

public class Exercise4_5 {
    public static void main(String[] args) {
        for(int i=0; i<=10; i++){
            for(int j=0; j<=i; j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
public class Exercise4_5 {
    public static void main(String[] args){
    	while( i<=10 ){
            while( j<=i ){
            	System.out.print("*");
                j++;
            }
            System.out.println();
            i++
        }
    }
}

6. 두 개의 주사위를 던졌을 때, 눈의 합이 6이 되는 모든 경우의 수를 출력하는 프로그램을 작성하시오.

풀었음

7. Math.random()을 이용해서 1부터 6사이의 임의의 정수를 변수 value에 저장하는 코드를 완성하라.

// 0 <= Math.random() < 1
// 문제 범위 1 <= ? <= 6 갯수 6개, 시작1
int value = (int)(Math.random()*6+1);

8. 방정식 2x+4y=10의 모든 해를 구하시오. 단, x와 y는 정수이고 각각의 범위는 0<=x<10, 0<=y<=10 이다.

풀었음

9. 숫자로 이루어진 문자열 str이 있을 때, 각 자리의 합을 더한 결과를 출력하는 코드를 완성하라. 만일 문자열이 "12345"라면, '1+2+3+4+5"의 결과인 15를 출력이 출력되어야 한다.

//내풀이
String str = "12345";
int sum = 0;

//sum += str.charAt(0)-'0';
//sum += str.charAt(1)-'0';
//sum += str.charAt(2)-'0';
//sum += str.charAt(3)-'0';
//sum += str.charAt(4)-'0';
//시작0, 끝4, 증감+1, 반복문 sum += str.charAt(i)-'0';

for(int i = 0; i < str.length(); i++){
	sum += str.charAt(i)-'0';
}
//다른 방법
String str = "12345";
int sum = 0;
for(String number : str.split("")){
    sum += Integer.parseInt(number);
}

10. int num , 타입의 변수 이 있을 때 각 자리의 합을 더한 결과를 출력하는 코드를 완성하라 만일 변수 의 값이 라면 . num 12345 , ‘1+2+3+4+5’ 15 의 결과인 를 출력하라.

//내 풀이
int sum = 0;
int num = 12345;
int jari = num%10;

while(true){
    sum += jari;
    num /= 10;
    if(num==0){
    break;
    }
}
//깔끔한 풀이
int sum = 0;
int num = 12345;

while(!(num==0)){
    sum += num%10;
    num /= 10;
}

11. 피보나치(Fibonnaci) 수열은 앞을 두 수를 더해서 다음 수를 만들어 나가는 수열이다. 예를 들어 앞의 두 수가 1과 1이라면 그 다음 수는 2가 되고 그 다음 수는 1과 2를 더해서 3이 되어서 1,1,2,3,5,8,13,21... 과 같은 식으로 진행된다. 1과 1부터 시작하는 피보나치수열의 10번째 수는 무엇인지 계산하는 프로그램을 완성하시오.

//1+1=2
//1+2=3	// 제일 처음 두 숫자 제외 시작3, 끝10
//2+3=5
//...
//A+B=C

int numA = 1;
int numB = 1;
int numC = 0;

for(int i=3; i<11 ; i++){
    numC = numA + numB;
    numA = numB;
    numB = numC;
}
System.out.println("피보나치 수열의 10번째 수 :"+numC);

12. 구구단의 일부분을 출력하시오.

풀었음,숙제아님

13. 주어진 문자열이 숫자인지를 판별하는 프로그램을 완성하시오.

public class Practice13 {
    public static void main(String[] args) {
       String value = "12o34";
       char ch = ' ';
       boolean isNumber = true;
       //반복문과 charAt(int i)를 이용해서 문자열의 문자를 하나씩 읽어서 검사한다.

       for(int i = 0;i < value.length(); i++){
           if('0' <= value.charAt(i) && value.charAt(i) <= '9'){
           isNumber = isNumber;
           }else{
           isNumber = !isNumber
           break;
           }
       }

       if(isNumber){
           System.out.println(value + "는 숫자입니다.");
       }else{
           System.out.println(value + "는 숫자가 아닙니다.");
       }
    }
}

//중간 코드 간단하게 하기
for(int i = 0; i < value.length(); i++){
    char ch = value.charAt(i)
    if(!('0' <= ch && ch <= '9')){
    	isNumber = false;
    	break;
    }

14. 숫자 맞추기 게임을 만들자. 1과 100사이의 값을 반복적으로 입력해서 컴퓨터가 생각한 값을 맞추면 게임은 끝난다. 사용자가 값을 입력하면, 컴퓨터는 자신이 생각한 값과 비교해서 결과를 알려준다. 사용자가 컴퓨터가 생각한 숫자를 맞추면 게임이 끝나고 몇 번만에 숫자를 맞췄는지 알려준다.

import java.util.Scanner;

public class Practice14 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        int com = (int)(Math.random()*100+1);
        int trial = 1;
        
        System.out.println(com); // 컴퓨터가 생각한 값 알기 위해
        while(true){
        	System.out.println("1에서 100사이의 값을 입력해주세요")
            int user = scanner.nextInt();
            if( com==user ){
            	break;
            }else if( com>user){
            	System.out.println("더 큰 수를 입력해주세요")
            }else{
            	System.out.println("더 작은 수를 입력해주세요")
            }
            trial++;
        }
        
        
        System.out.println("맞췄습니다.\n시도횟수는 " + trial + "번입니다.");
    }
}

15. 회문수를 구하는 프로그램을 작성한다. 회문수(palindrome)란, 숫자를 거꾸로 읽어도 앞으로 읽는 것과 같은 수를 말한다. 예를 들면 '12321'이나 '13531'같은 수를 말한다.

  • 12345 넣어서 1+2+3+4+5 = 19 와 비슷한 문제
public class Practice15 {
    public static void main(String[] args) {
        int number = 12321;
        int temp = number;
        int result = 0;
        
        while(!(temp==0)){
            result *= 10;
            result += temp%10;
            temp /= 10;
        }
        
        if(number == result){
            System.out.println(number + "는 회문수 입니다.");
        }else{
            System.out.println(number + "는 회문수가 아닙니다.");
        }
    }
}
profile
갈 길이 멀다

0개의 댓글