68. 콘솔에서 0이 입력 될 때 까지 계속 정수를 입력받고 출력하기

입력 범위 : -2147483648 ~ 2147483647

입력 예시

7 4 2 3 0 1 5 6 9 10 8

출력 예시

7

4

2

3

0

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int value = -1;
		while(value != 0 ) {
			value = scan.nextInt();
			System.out.println(value);
		}
		scan.close();		
	}
}

Swift 4.2

import Foundation

func searchAndPrint(line:String) -> Bool{
    var flag = true //0 이 입력되면 false
    let valueArray = line.split(separator: " ")
    for value in valueArray {
        if let temp = Int(value) {
            print(temp)
            if temp == 0 {
                flag = false
                break;
            }
        }
    }
    return flag //true : 0 값이 존재, false : 0 값이 없음
}

var flag = true //0 이 입력되거나 nil이 입력됬을경우 false
while flag {
    let line = readLine()
    if line != nil {
        flag = searchAndPrint(line: line!)
    } else {
        flag = false
    }
}

이번문제는 스위프트쪽에서 조금 문제가 있습니다.

더 찾아보면 사실 있을지도 모릅니다만 표준 입력장치로 정수입력을 받는 함수가 따로 안보이네요.

readLine()으로는 그냥 입력받는다고 해도 이게 하나만 입력될지 여러개가 동시에 입력될지 모르기에

처리해주는걸 저렇게 해줘봤습니다.break문은 써진곳의 반복문을 탈출하는거에요 나중에 이걸쓰라는 문제자체가 나올거같긴한데

그냥 이야기해봤습니다.

이 글들이 스위프트 입문하시는 분들께 도움이 됐으면 좋겠네요.

한국자료는 그렇게 많이 안보여서;;;

추가 -

원래부터가 c언어 학습용으로 만들어진 문제라 c언어 문법 문제들입니다.

이번은 문제는 goto문 사용에 대한 문제인데

이걸 while문으로 대체했습니다.

https://codeup.kr/problem.php?id=1071

67. 콘솔에서 한 개의 정수를 입력받고, 정수에 따른 문자열을 출력하라.

입력 범위 : 1~12

월 : 계절​

12,1,2 : winter

3,4,5 : spring

6,7,8 : summer

9,10,11 : fall

입력 예시

1

출력 예시

winter

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int value = scan.nextInt();
		scan.close();
		
		switch (value) {
		case 12: case 1: case 2:
			System.out.println("winter");
			break;
		case 3:
		case 4:
		case 5:
			System.out.println("spring");
			break;
		case 6: case 7: case 8:
			System.out.println("summer");
			break;
		case 9: case 10: case 11:
			System.out.println("fall");
			break;
		default:
			System.out.println("what?");
			break;
		}
	}
}

Swift 4.2

import Foundation

let line = readLine()
if line != nil {
    if let value = Int(line!) {
        switch value {
        case 12,1,2: print("winter")
        case 3,4,5: print("spring")
        case 6,7,8: print("summer")
        case 9,10,11: print("fall")
        default : print("what?")
        }
    }
}

이전문제였나, 스위치문에 break;를 넣지않으면 안되요! 라고 한게

사실 저렇게 이어서 동작을 하기에(범위지정 처럼 동작) 그런말을 했었습니다.

추가로

문제에서 JAVA 쪽을

case 3:

case 4:

case 5:

~~솰랴솰랴 break;

라고 써서 할슁ㅆ어염! 라고 써있어서 사실 이건 한줄로 쓰는것과 같다 라는걸 보여주려고 저렇게 해봤습니다

한줄로쓰는게 더 보기좋잖아요?

스위프트에서는 저렇게 하나하나 지정할수 있습니다

스위프트 짱짱!

break는 또 뭐냐 귀찮게 라고 하시는 우리 쿨한 스위프트누님

아 선택 실행구조의 마지막 문제였네요.

오늘은 한가하니 쭉쭉 진도를 나아가서 100제를 빨리 끝내고 다른거 포스팅하고싶네요

https://codeup.kr/problem.php?id=1070

66. 콘솔에서 한 개의 문자를 입력받고, 문자에 따른 문자열을 출력하라.

입력 범위: a ~ Z

​평가: 내용

D : slowly~

C : run!

B : good!!

A : best!!!

나머지문자들 : what?

입력 예시

A

출력 예시

best!!!

JAVA

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
	    char value = scan.next().charAt(0);
	    switch (value) {
		case 'A':
			System.out.println("best!!!");
			break;
		case 'B':
			System.out.println("good!!");
			break;
		case 'C':
			System.out.println("run!");
			break;
		case 'D':
			System.out.println("slowly~");
			break;
		default:
			System.out.println("what?");
			break;
		}
	}
}

 

Swift 4.2

import Foundation

let line = readLine()
if line != nil {
    if let value = line!.first {
        switch value {
        case "A": print("best!!!")
        case "B": print("good!!")
        case "C": print("run!")
        case "D": print("slowly~")
        default : print("what?")
        }
    }
}

 

이번엔 스위치문을 써보는게 문제입니다.

자바에서는 break를 잊지않아야합니다.

스위프트는 편하지만요.

추가로 문자하나만 입력받는걸 한줄로

scan.next().charAt(0);

이렇게 할 수 있었네요 .

이전엔 받은 라인을 문자배열로 바꾸고 그곳이 0를 반환받아서 문제풀었던거같은데 ㅋㅋㅋ

아 의미는 같습니다.

깔끔하게 할 수 있으면 되도록 깔끔하게 적고싶네요

이만 퇴근준비를 해야겠습니다.

아쉽게도 선택실행구조 시리즈 마지막이 아니군요.

https://codeup.kr/problem.php?id=1069

65. 콘솔에서 한 개의 정수를 입력받고, 점수 평가를 출력하라

입력 범위: 0~100

점수범위 : 평가

90 ~ 100 : A

70 ~ 89 : B

40 ~ 69 : C

0 ~ 39 : D

입력 예시

90

출력 예시

A

JAVA

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int value = scan.nextInt();
		char result = 'D';
		if (value >= 90) {
			result = 'A';
		} else if (value >= 70) {
			result = 'B';
		} else if (value >= 40) {
			result = 'C';
		} else {
			result = 'D';
		}
		System.out.println(result);
	}
}

 

Swift 4.2

import Foundation

let line = readLine()
if line != nil {
    if let value = Int(line!) {
        switch value {
        case 90...100 : print("A")
        case 70...89  : print("B")
        case 40...69  : print("C")
        case 0...39   : print("D")
        default:break
        }
    }
}

문제 의도는 else if 의 사용이지만

자바에서 했기에 스위프트에서는 의도고 나발이고 하고싶은데로 해봤습니다.

스위프트4.2에선 무려! 저런식으로! 범위가! 케이스문으로! 들어가기도합니다.

실 성능은 어떻게 나오지는 체크안해봐서 모릅니다.

참고로 두 수 사이의 ... 는 이상 이하, 를 나타냅니다.

..< 는 이상 미만

https://codeup.kr/problem.php?id=1068

 

 

64. 콘솔에서 한 개의 정수를 입력받고, 음/양 수 판별과 홀/짝 판별을 출력하라.

입력 범위: -2147483648 ~ 2147483647​

입력 예시

-2147483648

출력 예시

minus

even

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
	    int value = scan.nextInt();
	    if(value < 0) {
	    	System.out.println("minus");
	    	if(value % 2 == 0) {
	    		System.out.println("even");
	    	} else {
	    		System.out.println("odd");
	    	}
	    } else {
	    	System.out.println("plus");
	    	if(value % 2 == 0) {
	    		System.out.println("even");
	    	} else {
	    		System.out.println("odd");
	    	}
	    }
	}
}

 

 

Swift 4.2

import Foundation

let line = readLine()
if line != nil {
    if let value = Int(line!) {
        switch value < 0 {
        case true:
            print("minus")
            print(value%2 == 0 ? "even" : "odd")
        case false:
            print("plus")
            print(value%2 == 0 ? "even" : "odd")
        }
    }
}

이번은 어떻게 할까 고민하다 보니 중복if문을 써보는게 요점인거 같아서

굳이 if을 많이 겹쳐봤습니다.

자바에서는 안되지만 스위프트에서는 저렇게 불로도 키가 가능합니다.

애플에서는 성능때문인지 어쩐지는 모르겠지만 if문보단 스위치를 권장하고있는거 같더군요

참고로 나중에 스위치는 enum과 결합해서 깔끔! 하게 이곳저곳에서 사용가능해집니다.

JAVA는 솔직히 스위프트처럼 열심히 해본적이 없어서 모르겠네요.

https://codeup.kr/problem.php?id=1067

 

 

63. 콘솔에서 세 개의 정수를 입력받고, even(짝)/odd(홀) 출력하기

입력 : 1line 으로 3개의 정수가 공백을 두고 입력

입력 범위: -2147483648 ~ 2147483647​

입력 예시

1 2 4

출력 예시

odd

even

even

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
	    int [] values = new int [3];
	    for (int i = 0; i < values.length; i++) values[i] = scan.nextInt();
	    scan.close();
	    
	    for (int value : values) {
	    	if(value != 0 ) System.out.println(value % 2 == 0 ? "even" : "odd");
	    }
	}
}

 

 

Swift 4.2

import Foundation

let line = readLine()
if line != nil {
    let values = line!.split(separator: " ")
    if values.count == 3 {
        for i in 0 ..< values.count {
            if let value = Int(values[i]), value != 0 {
                print(value % 2 == 0 ? "even" : "odd")
            }
        }
    }
}

 

 

 

JAVA 의 출력단은 일부러 괄호를 생략해봤습니다.

사실 스위프트4 버전에선 지원하지 않습니다.

꽤나 유명? 한 생략인데 이게 한줄에 하나만 들어가면 헷갈리지않는데 여러개 깊이 들어가면 헷갈려서 코드를 읽는데 방해가 될거라 생각했는지

없더군요.

물론 뇌피셜입니다.

아 생략지원안하는건 공식이에요ㅎㅎ

전 이제 퇴근 준비해야겠네요.

내일도 시간이 남으면 조건/선택실행구조 시리즈를 이어서 포스트하겠습니다.

https://codeup.kr/problem.php?id=1066

62. 콘솔에서 세 개의 정수를 입력받고, 짝수만 출력하라.

입력 : 1line 으로 3개의 정수가 공백을 두고 입력

입력 범위: 0 ~ 2147483647​

입력 예시

1 2 4

출력 예시

2

4

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
	    int [] values = new int [3];
	    for (int i = 0; i < values.length; i++) {
			values[i] = scan.nextInt();
		}
	    scan.close();
	    
	    for (int value : values) {
			if(value % 2 == 0 && value != 0) {
				System.out.println(value);
			}
		}
	}
}

 

 

Swift 4.2

import Foundation

let line = readLine()
if line != nil {
    let values = line!.split(separator: " ")
    if values.count == 3 {
        for i in 0 ..< values.count {
            if let value = Int(values[i]), value % 2 == 0, value != 0 {
                print(value)
            }
        }
    }
}

 

 

JAVA부분에 입력과 출력 부문을 굳이 나눠봤습니다.

해보진않았지만 아마 입력 받는 동시에 0이 아니고 짝수일때 출력하라고 해도 코드업의 답안은 정답이라고 나올꺼에요.

ㅎㅎ 아니면 어떻하지...

윈도우에서 스위프트 문법 테스트하기 좋은 사이트가 없을까 뒤져봤는데 최신 xcode에서 제공하는 4이상 버전을 지원하는 사이트는 보이지않네요.

나중에 더 찾아봐야겠습니다.

참고로 스위프트는 버전별로 문법이 조금씩 다릅니다

특히 정수부분 숫자가 바뀔수록 문법이 확확 달라져요

1은 안봐봐서 모르겠고.. 2에서 3, 3에서 4 에서 많이 달라집니다.

5는 아직도 해보질않아서 모르겠지만 보기엔 4와 그닥 달라보이진 않았습니다.

https://codeup.kr/problem.php?id=1065

61. 콘솔에서 세 개의 정수를 입력받고, 가장 작은 수를 출력하라.

입력 : 1line 으로 3개의 정수가 공백을 두고 입력

입력 범위: -2147483648 ~ 2147483647​

입력 예시

1 3 5

출력 예시

1

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
	    int value0 = scan.nextInt();
	    int value1 = scan.nextInt();
	    int value2 = scan.nextInt();
		scan.close();
		//System.out.println((value0 < value1 ? value0 : value1) < value2 ? (value0 < value1 ? value0 : value1) : value2);
		System.out.println(value0 < value1 ? (value0 < value2 ? value0 : value2) : (value1 < value2 ? value1 : value2));
	}
}

 

 

 

Swift 4.2

import Foundation

let line = readLine()
if line != nil {
    let values = line!.split(separator: " ")
    if values.count == 3 {
        if let value0 = Int(values[0]), let value1 = Int(values[1]), let value2 = Int(values[2]){
            print(value0 < value1 ? (value0 < value2 ? value0 : value2) : (value1 < value2 ? value1 : value2))
        }
    }
}

 

JAVA 쪽 소스에서 10라인, 주석친 출력구문이 문제에서 권장? 도움말로 제공되는 답인데 전 그냥 두 부문으로 나눠서 푸는게 더 보기 좋더라고요

그래서 JAVA의 11라인, 스위프트의 8라인 구문처럼 출력했습니다.

https://codeup.kr/problem.php?id=1064

+ Recent posts