1031 : [기초-출력변환] 10진수 한 개 입력받아 8진수로 출력하기 with Swift

28. 콘솔에서 10진수를 입력받아 8진수로 출력하시오. ( 입력 범위 int )

입력 예시

10

출력 예시

12

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int value = scan.nextInt();
		System.out.println(Integer.toOctalString(value));
	}
}

 

 

Swift 4.2

import Foundation

func octalTrans(value:Int) -> [Int] {
    var flag = value
    var result = [Int]()
    
    while flag >= 8 {
        result.append(flag % 8)
        flag = flag / 8
        if flag < 8 { result.append(flag) }
    }
    
    result.reverse()
    return result
}

let line = readLine()
//let testValue = [124,235,65767,453,434365,57,24]

if line != nil {
    if let value = Int(line!){
        let octalArray = octalTrans(value: value)
        var printValue = String()
        for o in octalArray {
            printValue += "\(o)"
        }
        print(printValue)
    }
}

 

 

java에서는 손쉽게 진수 변환하는게 있는데 swift는 잘안보이네요.

아마 있을거라 생각하는데 찾아도 잘안나와서 그냥 만들어봤습니다.

테스트는 몇개해봤는데 되긴하는데 안될지도 뭔가 안되는게 있을지도 몰라요...

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

 

[기초-출력변환] 10진수 한 개 입력받아 8진수로 출력하기

%d(10진수 형태)로 입력받고, %o 를 사용하여 출력하면 8진수(octal)로 출력할 수 있다.

codeup.kr

 

 

 

1032 : [기초-출력변환] 10진 정수 한 개 입력받아 16진수로 출력하기1 with Swift

29. 콘솔에서 10진수를 입력받아 16진수로 출력하라.

입력 예시

255

출력 예시

ff

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();				
		System.out.println(Integer.toHexString(value));
	}
}

Swift 4.2

import Foundation
func trans9over(target:Int) -> String {
    var result:String
    switch target {
    case 10: result = "a"
    case 11: result = "b"
    case 12: result = "c"
    case 13: result = "d"
    case 14: result = "e"
    case 15: result = "f"
    default: result = ""
    }
    return result
}

func hexTrans(value:Int) -> [String] {
    var flag = value
    var result = [String]()
    
    while flag >= 16 {
        let mod = flag % 16
        if mod > 9 {
            result.append(trans9over(target: mod))
        } else { result.append("\(flag % 16)") }
        
        flag = flag / 16
        if flag < 16 {
            if flag > 9 {
                result.append(trans9over(target: flag))
            } else { result.append("\(flag)") }
        }
    }
    result.reverse()
    return result
}

let line = readLine()
if line != nil {
    if let value = Int(line!){
        let hexArray = hexTrans(value: value)
        var printValue = String()
        for h in hexArray {
            printValue += "\(h)"
        }
        print(printValue)
    }
}

;;;

뭔가 더 예쁘고 깔끔하게 하는 방법이 있을것 같으나 머리가 멍하네요...

특시 10이상을 문자로 표현하려고할때의 부분이 맘에 걸립니다

스위프트는 완전히 처음부터 독학이고 서적으로 차근차근 시작한게 아니라 솔직히 부족한 부분을 많이 느끼고 있습니다.

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

 

[기초-출력변환] 10진 정수 한 개 입력받아 16진수로 출력하기1

%d(10진수 형태)로 입력 받고 %x로 출력하면 16진수(hexadecimal) 형태로 소문자로 출력된다. 10진법은 한 자리에 10개(0 1 2 3 4 5 6 7 8 9) 문자 중 한 개를 사용한다. 16진법은 한 자리에 16개(0 1 2 3 4 5 6 7 8 9 a b c d e f) 문자 중 한 개를 사용한다. 16진법의 a는 10진법의 10, b는 11, c는 12 ... 와 같다.

codeup.kr

 

 

 

 

1033 : [기초-출력변환] 10진 정수 한 개 입력받아 16진수로 출력하기2 with Swift

30. 콘솔에서 10진수를 입력받아 16진수로 출력하라.

입력 예시

255

출력 예시

FF

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();
		String printValue = String.format("%X", value);
		System.out.println(printValue);
	}
}

 

Swift 4.2

import Foundation
func trans9over(target:Int,isLowercase:Bool) -> String {
    var result:String
    switch target {
    case 10: result = "a"
    case 11: result = "b"
    case 12: result = "c"
    case 13: result = "d"
    case 14: result = "e"
    case 15: result = "f"
    default: result = ""
    }
    if isLowercase {
        return result
    } else {
        return result.uppercased()
    }
}

func hexTrans(value:Int,isLowercase:Bool) -> [String] {
    var flag = value
    var result = [String]()
    
    while flag >= 16 {
        let mod = flag % 16
        if mod > 9 {
            result.append(trans9over(target: mod, isLowercase: isLowercase))
        } else { result.append("\(flag % 16)") }
        
        flag = flag / 16
        if flag < 16 {
            if flag > 9 {
                result.append(trans9over(target: flag, isLowercase: isLowercase))
            } else { result.append("\(flag)") }
        }
    }
    result.reverse()
    return result
}

let line = readLine()
if line != nil {
    if let value = Int(line!){
        let hexArray = hexTrans(value: value, isLowercase: false)
        var printValue = String()
        for h in hexArray {
            printValue += "\(h)"
        }
        print(printValue)
    }
}

 

이전이랑 다른건 딱히 없습니다...

1032항 문제 소스에서 isLowercase라는 변수하나 추가했을뿐입니다.

문자열 클래스에선 lowercased , uppercased 라는게 있어서 그걸 써봤습니다.

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

 

[기초-출력변환] 10진 정수 한 개 입력받아 16진수로 출력하기2

%d(10진수 형태)로 입력 받고 %X로 출력하면 16진수(hexadecimal) 형태로 대문자로 출력된다.

codeup.kr

 

반응형

1028 : [기초-데이터형] 정수 한 개 입력받아 그대로 출력하기2 with Swift

 

25. 콘솔에서 정수 한 개를 입력 받아 그대로 출력하라. ( 입력 되는 정수 범위 0 ~ 4294967295)

입력 예시

2147483648

출력예시

2147483648

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		long line = scanner.nextLong();
		scanner.close();
		System.out.println(line);
	}
}

 

 

Swift4.2

import Foundation

let line = readLine()
if line != nil {
    if let value = CUnsignedInt(line!){
        print(value)
    }
}

 

할까 말까하다가... 합니다

int 는 범위가 -2147483648 ~ 2147483647 라고합니다.

그런데 0 ~ 4294967295 까지 입력이 된다고했으니 타입을 다른걸로 해줘라 라는 문제였슴다

앞에 자바쪽 의도는 unsigned int 사용을 권하겠지만 하다보니 귀찮아서 long을 사용했습니다.

왠만한 수는 롱으로 다들어갑니다만... 메모리 낭비일거같네요

참고로 언어별로 표현이 다를수도 범위가 다를수 있습니다 특히 long같은경우는요.

 

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

 

[기초-데이터형] 정수 한 개 입력받아 그대로 출력하기2

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

codeup.kr

 

 

 

 

1029 : [기초-데이터형] 실수 한 개 입력받아 그대로 출력하기2 with swift

26. 콘솔에서 실수 한 개를 입력받아 그대로 출력하라. ( 입력범위 : +- 1.7*10^-308 ~ 1.7*10^308)

출력 - 소수점 11번째 짜리 까지 출력

입력 예시

3.14159265359

출력 예시

3.14159265359

이번 문제는 이전 문제랑 그닥 다르지않으니 넘어갈래요.

수정 --

갑자기 마음이 바뀌어 일일이 다 소스 적을려고합니다.

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		double line = scanner.nextDouble();
		scanner.close();
		System.out.println(String.format("%.11f", line));
	}
}

 

 

Swift 4.2

import Foundation

let line = readLine()
//let line:String? = "3.14159265359"
if line != nil {
    if let value = CDouble(line!){
        print(String.init(format:  "%.11lf", value))
    }
}

 

 

 

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

 

[기초-데이터형] 실수 한 개 입력받아 그대로 출력하기2

float 데이터형을 사용하면 3.4*10^-38 ~ 3.4*10^38 범위의 실수를 저장할 수 있다. (float 로 선언하고 %f로 입력 받거나 출력하면 된다.) 하지만 이 범위를 넘는(더 작거나 더 큰) 실수를 저장하기 위해서는  보다 큰 범위를 저장할 수 있는 다른 데이터형을 사용해야 정상적으로 저장시킬 수 있다. 쉽게 생각하면, float 를 사용하는 것보다 double 을 사용하는 것이 좀더 정확하게 저장할 수 있다.  단, 실수 1개를 저장하

codeup.kr

 

 

 

 

 

1030 : [기초-데이터형] 정수 한 개 입력받아 그대로 출력하기3 with swift

27. 콘솔에서 정수 한 개를 입력받아 그대로 출력하라. ( 입력범위 : –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)

입력 예시

-2147483649

출력 예시

-2147483649

JAVA

 

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		long line = scanner.nextLong();
		scanner.close();
		System.out.println(line);
	}
}

 

 

Swift 4.2

import Foundation

let line = readLine()
if line != nil {
    if let value = CLongLong(line!) {
        print(value)
    }
}

 

 

대는 소를 겸한다고... 1028번이랑 겹쳐버렸습니다.

설마 long을 써서 입출력하라는 문제가 나올줄은 몰랐네요

다시 한번 말씀드리자면 타입은 언어별로 범위가 다르거나 표현이 다를수 있습니다.

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

 

[기초-데이터형] 정수 한 개 입력받아 그대로 출력하기3

-2147483648 ~ +2147483647 범위의 정수를 저장하고 처리하기 위해서는 int 데이터형을 사용해 변수를 선언하면된다. (int 로 선언하고 %d나 %i 로 입력 받거나 출력하면 된다.) 하지만 이 범위를 넘어가는 정수를 저장하기 위해서는 보다 큰 범위를 저장할 수 있는 다른 데이터형을 사용해야 정상적으로 저장시킬 수 있다. long long int 데이터형을 사용하면 –9,223,372,036,854,775,808 ~ 9,223,372,0

codeup.kr

 

반응형

1026 : [기초-입출력] 시분초 입력받아 분 만 출력하기 with Swift

 

23. 콘솔에서 시간을 시:분:초 형태로 입력받아 분 만 출력해보시오.

입력 예시

12:9:50

출력 예시

9

JAVA

 

import java.util.Scanner;
import java.util.regex.Pattern;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String pattern = "^[0-9]*:[0-9]*:[0-9]*$";
		
		String line = scanner.nextLine();
		scanner.close();
		
		if(Pattern.matches(pattern, line)) {
			String[] dotPars = line.split(":");
			if(dotPars.length > 2) {
				int hour = Integer.parseInt(dotPars[0]);
				int minute = Integer.parseInt(dotPars[1]);
				int second = Integer.parseInt(dotPars[2]);
				System.out.println(minute);
 
			}
		}
	}
}

 

Swift 4.2

import Foundation
let line = readLine()
//var line:String? = "2012.1.1"
if line != nil {
    let p = "^[0-9]*:[0-9]*:[0-9]*$"
    do {
        let regex = try NSRegularExpression(pattern: p)
        let results = regex.matches(in: line!, options: [], range: NSRange(line!.startIndex..., in: line!))
        let arry = results.map { (cheking) -> String in
            let str = String(line![Range(cheking.range, in: line!)!])
            let arry = str.split(separator: ":")
            if arry.count > 2 {
                let h = Int(arry[0])
                let m = Int(arry[1])
                let s = Int(arry[2])
                guard h != nil, m != nil, s != nil else {
                    return ""
                }
                return "\(m!)"
            } else {
                return ""
            }
        }
        if arry.count > 0 {
            print(arry.first!)
        }
    }catch let err {
        print("ERROR: \(err.localizedDescription)")
    }
}

이번 문제는 1019번 년월일 소스를 변경해서 돌렸습니다.

패턴 매칭은 앞으로도 소스를 우려먹을수 있겠네요~

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

 

[기초-입출력] 시분초 입력받아 분 만 출력하기

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

codeup.kr

 

 

 

 

 

1027 : [기초-입출력] 년월일 입력받아 형태 바꿔 출력하기 with Swift

24. 콘솔에서 년.월.일을 입력받아 일-월-년 형태로 출력하라.

입력 예시

2014.07.15

출력 예시

15-07-2014

Java

import java.util.Scanner;
import java.util.regex.Pattern;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String pattern = "^[0-9]*.[0-9]*.[0-9]*$";
		
		String line = scanner.nextLine();
		scanner.close();
		
		if(Pattern.matches(pattern, line)) {
			String[] dotPars = line.split("\\.");
			if(dotPars.length > 2) {
				int year = Integer.parseInt(dotPars[0]);
				int month = Integer.parseInt(dotPars[1]);
				int day = Integer.parseInt(dotPars[2]);
				System.out.println(String.format("%02d-%02d-%04d", day,month,year));
			}
		}
	}
}

 

swift 4.2

import Foundation
let line = readLine()
//var line:String? = "2012.1.1"
if line != nil {
    let p = "^[0-9]*.[0-9]*.[0-9]*$"
    do {
        let regex = try NSRegularExpression(pattern: p)
        let results = regex.matches(in: line!, options: [], range: NSRange(line!.startIndex..., in: line!))
        let arry = results.map { (cheking) -> String in
            let str = String(line![Range(cheking.range, in: line!)!])
            let arry = str.split(separator: ".")
            if arry.count > 2 {
                let y = Int(arry[0])
                let m = Int(arry[1])
                let d = Int(arry[2])
                guard y != nil, m != nil, d != nil else {
                    return ""
                }
                return String.init(format: "%02d-%02d-%04d", arguments:[d!,m!,y!])
            } else {
                return ""
            }
        }
        if arry.count > 0 {
            print(arry.first!)
        }
    }catch let err {
        
        print("ERROR: \(err.localizedDescription)")
    }
}

이번에도 역시 소스를 우려먹었습니다. 패턴이랑 출력만 바꿔주면되서 편하네요~

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

 

[기초-입출력] 년월일 입력받아 형태 바꿔 출력하기

년월일을 출력하는 방법은 나라마다, 형식마다 조금씩 다르다. 날짜를 년월일(yyyy.mm.dd)의 형태로 입력받아, 일월년(dd-mm-yyyy)의 형태로 출력하는 프로그램을 작성해보자. (단, 한 자리 일/월은 0을 붙여 두 자리로, 년도는 0을 붙여 네 자리로 출력한다.)

codeup.kr

 

 

 

반응형

1023 : [기초-입출력] 실수 한 개 입력받아 부분별로 출력하기 with Swift

20. 콘솔에서 실수 한 개를 입력받고 이를 정수부분과 실수 부분으로 나누어 출력하라

입력 예시

11.414213

출력 예시

11

414213

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String line = scanner.nextLine();
		String []  pars = line.split("\\.");
		if( pars.length > 1 ) {
			System.out.println(pars[0]);
			System.out.println(pars[1]);
		}
	}
}

Swift 4.2

import Foundation

//print("입력 - ")

if let line = readLine() {
    let pars = line.split(separator: ".")
    if pars.count > 1 , pars.count < 3 {
        print(pars.first!)
        print(pars.last!)
    }
}

 

 

이건 할까 말까 하다가

실수로 입력받아 정수로 캐스트후 나온 값으로 실수와 정수부분을 나누어 출력하는걸로 해보자 라는 생각에

잡았는데...

위에는 안적었으나 소수점 자리 6자리까지 정확하게 나와야하는듯하다..

하지만 계속 6번째 자리에서 오차가발생하여 어떻게 오차를 줄일까 고민하다가 그냥 문자열로 입출력..

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

 

[기초-입출력] 실수 한 개 입력받아 부분별로 출력하기

실수 한 개가 입력된다. (단, 입력 값은 절댓값이 정수부가 $100,000$을 넘지 않으며, 소수점 이하는 0으로 시작하지 않으며, 6자리이하이다.)

codeup.kr

 

 

 

 

 

1024 : [기초-입출력] 단어 한 개 입력받아 나누어 출력하기 with swift

21. 콘솔에서 영단어를 입력받고 입력받은 단어를 한줄헤 한 문자씩 분리해 출력하라.

입력 예시

Boy

출력 예시

'B'

'o'

'y'

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String line = scanner.nextLine();
		char []  pars = line.toCharArray();
		
		for (char c : pars) {
			System.out.println("'" + c + "'");
		}
	}
}

 

Swift 4.2

import Foundation

if let line = readLine() {
    for c in line {
        print("'\(c)'")
    }
}

 

 

점차 내가 뭐하고있는지 모를지경...

왜 이걸 시작했을까

문제가 뭐가나오는지좀 보고 시작할껄

문법문제가 그만좀 나왔으면 좋겠습니다.

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

 

[기초-입출력] 단어 한 개 입력받아 나누어 출력하기

C언어에서는 문장을 저장하기 위해 특별한 방법을 사용하지 않고 배열이라는 연속된 공간에 문자들을 연속으로 한 개씩 저장하는 방법을 사용한다. 단, 문자열(문장)의 마지막임을 나타내기 위해 문자열의 마지막에 널(NULL) 문자라는 특별한 의미를 갖는 문자를 삽입해 문장임을 나타낸다. 널(NULL)은 영어 단어 자체의 의미로는, 아무런 가치가 없는 또는 아무것도 없는, 사용되지 않은 등의 의미를 가지는데 문자로는 '\0', 아스키문자의 정수값은 0을 의미하며

codeup.kr

 

 

1025 : [기초-입출력] 정수 한 개 입력받아 나누어 출력하기 with Swift

 

22. 콘솔에서 다섯자리로 이루어진 한 개의 정수를 입력받고 각 자리별로 구분해 출력하라.

입력 예시

74552

출력 예시

[70000]

[4000]

[500]

[50]

[2]

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int line = scanner.nextInt();
//		int line = 75254;
		
		if(line >= 10000 && line <= 99999) {
			func1(line, 10000);
		}
	}
	public static void func1(int target , int p) {
		int temp = (target / p) * p;
		System.out.println("["+temp+"]");
		int next_p = p / 10;
		if(next_p > 0 ) {
			func1(target - temp, next_p);
		} else {
			return;
		}
	}
}

Swift 4.2

import Foundation

public func func1(target : Int, place p: Int) {
    let temp = (target / p) * p
    print("[\(temp)]")
    let next_p = p / 10
    if next_p > 0 {
        return func1(target: target - temp, place: next_p)
    } else {
        return;
    }
}
if let line = readLine() {
    let clean = line.trimmingCharacters(in: .whitespaces)
    if clean.count == 5 {
        if let value = Int(clean) {
            if value >= 10000, value <= 99999 {
                func1(target: value,place: 10000)
            }
        }
    }
}

스위프트는 ios로 접해서 커맨드라인 프로젝트는 이번 기초100제에서 처음써본다.

함수를 아래에다 정의해놨더니 위에있는 녀석이 함수를 못찾는일이 발생..

아 c가 베이스라서 위에서 선언을해줘야하는구나 라며 여러가지 방법으로 타이핑해봤으나 다안된다..

결국 함수를 실행라인위로 올렸는데 도대체 뭐가뭔지...

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

 

[기초-입출력] 정수 한 개 입력받아 나누어 출력하기

scanf("%1d%1d%1d%1d%1d", &a, &b, &c, &d, &e); 를 사용하면 입력 받는 숫자를 1개씩 잘라 a, b, c, d, e, 변수에 저장할 수 있다. [예시] 읽어들인 값을 형태를 바꿔 출력하기 위해 printf("[%d]\n", a*10000); 과 같은 방법을 사용할 수 있다.

codeup.kr

 

반응형

1020 : [기초-입출력] 주민번호 입력받아 형태 바꿔 출력하기 with swift

17. 콘솔에서 주민등록번호를 받아 형태를 바꿔 출력하라.

입력 형식 : XXXXX-XXXXXXX

출력 형식: XXXXXXXXXXXXX

입력 예시

750904-1123214

출력 예시

7509041123214

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String line = scanner.nextLine();
		scanner.close();
		
		if(line.length() > 13) {
			String [] pars = line.split("-");
			if(pars.length > 1) {
				System.out.println(pars[0] + pars[1]);
			} else {
				System.out.println("ERROR: 입력 형식 오류, 잘못된 문자가 입력됨");
			}
		} else {
			System.out.println("ERROR: 입력 형식 오류, 자릿수 부족");
		}
		
	}
}

Swift 4.2

import Foundation

if let line = readLine() {
    if line.count > 13 {
        var pars = line.split(separator: "-")
        if pars.count > 1 {
            print(pars[0] + pars[1])
        } else {
            print("Error: 입력 형식 오류, 잘못된 문자가 입력됨")
        }
    } else {
        print("Error: 입력 형식 오류, 자릿수 부족")
    }
}

 

패턴을 만들어서 주민등록 패턴인지 검사하는 과정을 추가할까하다가 귀찮아서 포기했습니다.

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

 

[기초-입출력] 주민번호 입력받아 형태 바꿔 출력하기

주민등록번호는 다음과 같이 구성된다. XXXXXX-XXXXXXX 앞의 6자리는 생년월일(yymmdd)이고 뒤 7자리는 성별, 지역, 오류검출코드이다. 주민등록번호를 입력받아 형태를 바꿔 출력해보자.

codeup.kr

 

 

 

 

 

1021 : [기초-입출력] 단어 한 개 입력받아 그대로 출력하기 with Swift

18.하나의 단어를 입력받아 그대로 출력

(단, 단어의 길이는 50글자 이하이다.)

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String line = scanner.nextLine();
		scanner.close();
		if(line.length() > 0 && line.length() < 51 ){
			System.out.println(line);
		}
	}
}

 

Swift 4.2

import Foundation

//print("입력 - ")

if let line = readLine() {
    if line.count > 0, line.count < 51 {
       print(line)
    }
}

 

 

 

패턴 매칭하는거 까지 조금씩 올라가서 좋았는데

갑자기 난이도가 다시 내려가기 시작해서 안타깝습니다.

기초공부라도 될까해서 잡았는데 그냥 타이핑 노가다가 될거같은 느낌이 풀풀 풍기네요

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

 

[기초-입출력] 단어 한 개 입력받아 그대로 출력하기

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

codeup.kr

 

 

 

 

 

1022 : [기초-입출력] 문장 한 개 입력받아 그대로 출력하기 with Swift

19. 콘솔에서 한 개의 문장을 입력받고, 그대로 출력하라.

단 2000자를 넘지않는다.

원래 C를 바탕으로 제작된 문제라 그런가 로우레벨 입출력을 바라는거 같습니다.

아무작업없이 단순히 입력받고 그대로 출력하는건 이제 그냥 뛰어넘어야겠네요..

그래서 뛰어 넘겠습니다.

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String line = scanner.nextLine();
		scanner.close();
		if(line.length() > 0 && line.length() <= 2000 ){
			System.out.println(line);
		}
	}
}

Swift 4.2

import Foundation

let line = readLine()
if line != nil {
    if line!.count > 0 , line!.count <= 2000 {
        print(line!)
    }
}

 

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

 

[기초-입출력] 문장 한 개 입력받아 그대로 출력하기

char data[2001]; fgets(data, 2000, stdin); printf("%s", data); 를 실행하면 공백이 포함된 문장을 키보드(stdin)로 입력 받아 최대 2000 문자(영문자)까지 data[] 공간에 저장하고 출력할 수 있다. 한글의 경우 1000글자까지 가능하다. %s 는 문자열(string)로 출력하라는 의미이다.

codeup.kr

 

반응형

1017 : [기초-입출력] 정수 한 개 입력받아 세 번 출력하기  with Swift

14. 콘솔에서 정수를 한 개 입력 받고 이를 3번 출력하라.

입력 예시

125

출력 예시

125 125 125

JAVA

1

2

3

4

5

6

7

8

9

10

import java.util.Scanner;

 

public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int value1 = scanner.nextInt();

        scanner.close();

        System.out.println(value1 + " " + value1 + " " + value1);

    }

}

Colored by Color Scripter

cs

 

Swift 4.2

1

2

3

4

5

6

7

import Foundation

let line = readLine()

if line != nil {

    if let value = Int(line!) {

        print("\(value) \(value) \(value)")

    }

}

Colored by Color Scripter

cs

 

 

앞으로 대략 85문제 남았는데 계속 이런것만 하진 않을까 걱정됩니다..

알고리즘 문제는 언제 나오려나

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

 

[기초-입출력] 정수 한 개 입력받아 세 번 출력하기

printf("%d %d %d", a, a, a); 와 같은 방법으로 한 변수의 값을 여러 번 출력할 수 있다.

codeup.kr

 

 

 

 

 

1018 : [기초-입출력] 시간 입력받아 그대로 출력하기 with Swift

 

15. 콘솔에서 시간이 특정 형식에 맞추어 입력될때 그대로 출력하시오.

입력 - 시와분 이  :  으로 구분되어 입력됨.

입력 예시

3:16

출력 예시

3:16

JAVA

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

import java.util.Scanner;

import java.util.regex.Pattern;

 

public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        String pattern = "^[0-9]*:[0-9]*$";

        

        String line = scanner.nextLine();

        scanner.close();

        if(Pattern.matches(pattern, line)) {

            System.out.println(line);

        }

    }

}

Colored by Color Scripter

cs

 

Swift 4.2

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

import Foundation

//print("입력: ")

let line = readLine()

//var line:String? = "adsf1:30asdf"

if line != nil {

    let p = "[0-9]*:[0-9]*"

    do {

        let regex = try NSRegularExpression(pattern: p)

        let results = regex.matches(in: line!, options: [], range: NSRange(line!.startIndex..., in: line!))

        let arry = results.map { (cheking) -> String in

            return String(line![Range(cheking.range, in: line!)!])

        }

        if arry.count > 0 {

            print(arry.first!)

        }

    }catch let err {

        print("ERROR: \(err.localizedDescription)")

    }

}

Colored by Color Scripter

cs

이번건 쪼....금 이것저것 벗어나버렸습니다. 그냥 문자열에서 "숫자:숫자" 형식을 가진녀석 을 뽑아내는 코드가 되버렸네요.

원래 문제의 의미는 형식을 갖춘 입력받기! 뭐 그런거 같아서 자바쪽도 그러한 형식 아니면 출력하지마! 라고 막아놨지만

스위프트 쪽은 약간 다르게 문자열에서 해당 형식을 뽑아내는식으로 해봤습니다.

혹시나 몇개 더있을경우 첫번째꺼만 출력해라 라고 적었네요.

정규식 사용에 대해 공부해본 좋은 문제였습니다.

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

 

[기초-입출력] 시간 입력받아 그대로 출력하기

scanf( ) 함수는 형식(format)에 맞추어 입력 받는 함수이기 때문에 입력 받고자 하는 형식에 맞게 적어주면 된다. [예시] scanf("%d:%d", &h, &m); //h와 m에 값이 10진수로 저장된다.

codeup.kr

 

 

 

 

 

1019 : [기초-입출력] 년월일 입력받아 형식에 맞게 출력하기 with Swift

16. 콘솔에서 년,월, 일을 입력받아 형식에 맞게 출력하라.

입력 - 년.월.일

출력 - yyyy.mm.dd

입력 예시

2012.1.1

2012.01.01

출력 예시

2012.01.01

2012.01.01

JAVA

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;

import java.util.regex.Pattern;

 

public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        String pattern = "^[0-9]*.[0-9]*.[0-9]*$";

        

        String line = scanner.nextLine();

        scanner.close();

        if(Pattern.matches(pattern, line)) {

            String[] dotPars = line.split("\\.");

            System.out.println(dotPars.length);

            int year = Integer.parseInt(dotPars[0]);

            int month = Integer.parseInt(dotPars[1]);

            int day = Integer.parseInt(dotPars[2]);

            System.out.println(String.format("%04d.%02d.%02d", year,month,day));

        }

        

    }

}

Colored by Color Scripter

cs

 

Swift 4.2

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

29

30

import Foundation

let line = readLine()

//var line:String? = "2012.1.1"

if line != nil {

    let p = "^[0-9]*.[0-9]*.[0-9]*.[0-9]*$"

    do {

        let regex = try NSRegularExpression(pattern: p)

        let results = regex.matches(in: line!, options: [], range: NSRange(line!.startIndex..., in: line!))

        let arry = results.map { (cheking) -> String in

            let str = String(line![Range(cheking.range, in: line!)!])

            let arry = str.split(separator: ".")

            if arry.count > 2 {

                let y = Int(arry[0])

                let m = Int(arry[1])

                let d = Int(arry[2])

                guard y != nil, m != nil, d != nil else {

                    return ""

                }

                return String.init(format:"%04d.%02d.%02d",arguments:[y!,m!,d!])

            } else {

                return ""

            }

        }

        if arry.count > 0 {

            print(arry.first!)

        }

    }catch let err {

        print("ERROR: \(err.localizedDescription)")

    }

}

Colored by Color Scripter

cs

 

이번에는 지난문제 코드에서 단순히 패턴과 출력 형식만 바꿔줬습니다....

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

 

[기초-입출력] 년월일 입력받아 형식에 맞게 출력하기

입력받은 년, 월, 일을 출력한다. 단, 자릿수는 yyyy.mm.dd형태로 출력한다. (입출력 예시 참고, %02d를 사용하면 2칸을 사용해 출력하는데, 1자리 수인 경우 앞에 0이 붙어 출력된다.)

codeup.kr

 

반응형

1013 : [기초-입출력] 정수 두 개 입력받아 그대로 출력하기 with Swift

 

11. 콘솔에서 정수 두 개를 입력받아 그대로 출력하라.

두 개의 정수가 공백으로 구분되어 입력된다.

입력 예시

1 2

출력 예시

1 2

JAVA

1
2
3
4
5
6
7
8
9
10
11
12
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int value1 = scanner.nextInt();
        int value2 = scanner.nextInt();
        System.out.println(value1 + " " + value2);
        scanner.close(); 
    }
}
 
cs

 

Swift 4.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import Foundation
 
func parseLine(str:String-> [Int]{
    var resultValue = [Int]()
    let temprorary = str.split(separator: " ")
    for sub in temprorary {
        if let value = Int(sub) {
            resultValue.append(value)
        }
    }
    return resultValue
}
 
let line = readLine()
if line != nil {
    let resultValue:[Int= parseLine(str: line!)
    if resultValue.count > 1 {
        print(String.init(format: "%d %d", resultValue[0],resultValue[1]))
    }
}
cs

 

 

솔직히 입력받는거에 readLine 말고 다른게 있을수도 있습니다;;

자바의 nextInt() 같은 편리한게요.

하지만 입력 부분을 대충 검색해봤는데 안보여서 그냥 readline으로 받고 스페이스를 기준으로 파싱해서 출력했습니다.

 

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

 

[기초-입출력] 정수 두 개 입력받아 그대로 출력하기

int a, b; scanf("%d %d", &a, &b); printf("%d %d", a, b); 와 같은 방법으로 가능하다.

codeup.kr

 

//추가-

기존에 올렸던 블로그의 소스에서 한줄입력을 받고 나누는 부분을 따로 함수로 밖으로 빼내어 올리겠습니다

 

 

1014 : [기초-입출력] 문자 두 개 입력받아 순서 바꿔 출력하기 with Swift

12. 콘솔에서 두 개의 문자를 입력 받은 후 순서를 바꿔 출력하라.

입력 예시

A b

출력 예시

b A

JAVA

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

import java.util.Scanner;

 

public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        String line = scanner.nextLine();

        scanner.close();

        

        String[] words = line.split(" ");

        if(words.length == 2) {

            String resultString = new String();

            for (int i = words.length - 1; i >= 0--i) {

                resultString += " " + words[i];

            }

            System.out.println(resultString.trim());

        }

         

    }

}

Colored by Color Scripter

cs

 

Swift 4.2

1

2

3

4

5

6

7

8

9

10

11

12

import Foundation

let line = readLine()

if line != nil {

    var temporary = line!.split(separator: " ")

    temporary.reverse()

    

    var resultString = String()

    for sub in temporary {

        resultString.append(" \(sub)")

    }

    print(resultString.trimmingCharacters(in: .whitespaces))

}

Colored by Color Scripter

cs

 

스위프트는 이전과 비슷하게됐네요.

이번은 자바에서도 다른 좋은게 있지않을까 생각되지만, 찾아보기도 귀찮아졌습니다.

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

 

[기초-입출력] 문자 두 개 입력받아 순서 바꿔 출력하기

char x, y; scanf("%c %c", &x, &y); printf("%c %c", y, x); //출력되는 순서를 작성 와 같은 방법으로도 해결할 수 있다.

codeup.kr

 

 

 

 

 

 

 

1015 : [기초-입출력] 실수 한 개 입력받아 소수점 이하 둘째 자리까지 출력하기 with Swift

 

13. 콘솔에서 실수(float)를 한 개를 입력받아 소수점 이하 3째 자리에서 반올림하여 2째 자리까지 출력하시오.

입력 예시

1.59654

출력 예시

1.60

JAVA

1

2

3

4

5

6

7

8

9

10

import java.util.Scanner;

 

public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        Double value1 = scanner.nextDouble();

        System.out.println(String.format("%.2f", value1));

        scanner.close();

    }

}

Colored by Color Scripter

cs

 

Swift 4.2

1

2

3

4

5

6

7

8

import Foundation

let line = readLine()

if line != nil {

    if let floatValue = Double(line!) {

        let printValue = String.init(format:"%.2f", arguments: [floatValue])

        print(printValue)

    }

}

Colored by Color Scripter

cs

 

이전에 소수점자리 0으로 채우기에서 그냥 .2f로 변경한거네요..

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

 

[기초-입출력] 실수 한 개 입력받아 소수점 이하 둘째 자리까지 출력하기

double로 변수를 선언한 경우 %.2lf로 출력하고, float으로 변수를 선언한 경우 %.2f로 출력하면, 소수점 3째 자리에서 반올림 하여 2째 자리까지 출력할 수 있다.

codeup.kr

 

 

 

 

반응형

1010 : [기초-입출력] 정수 한 개 입력받아 그대로 출력하기 with Swift

 

8. 콘솔에서 정수값 한개를 입력받고, 입력받은 값을 그대로 출력하라

입력 예시

15

출력 예시

15

 

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int value1 = scanner.nextInt();
        scanner.close();
		System.out.println(value1);
	}
}

 

Swift 4.2

import Foundation
let line = readLine()
if line != nil {
    if let value = Int(line!) {
        print(value)
    }
}

 

이번은 플레이그라운드에서 실행할수 없어서 Mac의 커맨드라인프로젝트로 생성하였습니다.

ios만드는거로 바로 시작해서 표준입력받는건 처음이네요.

여담으론 숫자 이외의 다른게 들어왓을때의 처리를 안해줘서 오답처리나올줄알았는데

정답이 나왔습니다 ;;

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

 

[기초-입출력] 정수 한 개 입력받아 그대로 출력하기

키보드로 입력한 정수값을 그대로  출력하는 프로그램을 작성해보자.

codeup.kr

 

 

 

 

1011 : [기초-입출력] 문자 한 개 입력받아 그대로 출력하기 with Swift

 

9. 콘솔에서 키보드로 문자 한 개를 입력하고, 그대로 출력하라.

입력 예시

p

출력 예시

p

JAVA

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        String value1 = scanner.next();

        scanner.close();

        System.out.println(value1);

    }

}

 

Swift 4.2

import Foundation
let line = readLine()
if line != nil { print(line!) }

이번 역시 맥 커맨드라인 프로젝트로 생성하였습니다.

왜 코드업 기초100제 추천영상에서 초중고 처음 접하는사람에게 추천! 이라는 말이 들어있었는지 9번문제부터 깨달았습니다.

 

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

 

[기초-입출력] 문자 한 개 입력받아 그대로 출력하기

키보드로 입력한 문자를 그대로 출력하는 프로그램을 작성해보자.

codeup.kr

 

 

 

 

 

1012 : [기초-입출력] 실수 한 개 입력받아 그대로 출력하기 with Swift

 

10. 콘솔에서 키보드로 소수점 6자리 이하의 실수를 한개 입력받고, 그대로 출력하라.

입렵 예시

1.414000

출력 예시

1.414000

JAVA

1

2

3

4

5

6

7

8

9

10

11

import java.util.Scanner;

 

public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        Double value1 = scanner.nextDouble();

        System.out.println(String.format("%.06f", value1));

        scanner.close();

    }

}

 

Colored by Color Scripter

cs

 

Swift 4.2

1

2

3

4

5

6

7

8

import Foundation

let line = readLine()

if line != nil {

    if let floatValue = Double(line!) {

        let printValue = String.init(format:"%.06f", arguments: [floatValue])

        print(printValue)

    }

}

Colored by Color Scripter

cs

소수점 6자리까지 깔끔히맞춰서 출력하는 문제였습니다.;;

솔직히 의미가 있나 싶은 코드이긴한데 뭐 까라면 까야죠

스위프트로 콘솔쪽 입출력은 해본적이 없어서 여러가지로 새롭네요

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

 

[기초-입출력] 실수 한 개 입력받아 그대로 출력하기

키보드로 입력한 실수(소수점이 있는 수)를 그대로 출력하는 프로그램을 작성해보자.

codeup.kr

 

 

 

 

반응형

+ Recent posts