1038 : [기초-산술연산] 정수 두 개 입력받아 합 출력하기1 with Swift

35. 콘솔에서 두 개의 정수를 입력받아 합을 출력하라.

입력 : 한 줄에 공백으로 두개의 정수가 구분되어 입력된다. 입력되는 정수의 범위는 다음과 같다.

입력 범위 : -1073741824 ~ 1073741824

입력 예시

123 -123

출력 예시

0

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();
		scan.close();
		System.out.println(value0 + value1);
	}
}

 

 

Swift 4.2

import Foundation

let line = readLine()
if line != nil {
    let valueArray = line!.split(separator: " ")
    if valueArray.count == 2 {
        if let value0 = Int(valueArray[0]), let value1 = Int(valueArray[1]) {
            print((value0 + value1))
        }
    }
}

 

 

 

이번문제는 읽자마자 아! 많이 하는 실수인 계산시의 중간값이 범위를 오버하는걸 방지하는 문제이구나!

라고 생각했는데 밑의 단 범위는 이것이다 라고 바로 부정당했네요.

잠깐 이야기하자면

int 의 범위내의 입력값과

int의 범위 내의 출력값이 나온다고해도

그 중간값이 int의 범위내에 있다고 생각 할 수 없습니다.

중간식이 단순 연산이라면 금방 눈치를 채겠지만 막 복잡한 식이 들어가면 어느순간에 범위를 넘어서 버릴수도 있습니다.

물론 이러한 문제는 금방 디버깅시에 발견가능하지만 중간값을 생각안하면 디버깅툴에서 알려주는 라인의 오류를 이해를 못할 수 도 있기에

잠깐 이야기 해봤습니다.

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

 

[기초-산술연산] 정수 두 개 입력받아 합 출력하기1

정수 2개를 입력받아 합을 출력하는 프로그램을 작성해보자. (단, 입력되는 정수는 -1073741824 ~ 1073741824 이다.)

codeup.kr

 

 

 

 

 

 

 

 

1039 : [기초-산술연산] 정수 두 개 입력받아 합 출력하기2 with Swift

36.콘솔에서 정수 두 개를 입력받아 합을 출력하라. 단 입력 되는 정수의 범위는 다음과 같다.

입력 범위 : −2147483648 ∼ 2147483647

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

입력 예시

2147483647 2147483647

출력 예시

4294967294

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		long longValue = 0;
		for (int i = 0; i < 2; i++) {
			longValue += scan.nextInt();
		}
		scan.close();
		System.out.println(longValue);
	}
}

 

 

 

Swift 4.2

import Foundation

let line = readLine()
if line != nil {
    let valueArray = line!.split(separator: " ")
    if valueArray.count == 2 {
        if let value0 = Int(valueArray[0]), let value1 = Int(valueArray[1]) {
            print( value0 + value1 )
        }
    }
}

 

 

 

스위프트가 이전 모든 값이 int범위였을때랑 같은 소스다! 잘못한거 아니냐! 라고 말할수 있겠으나

사실 스위프트의 기본 Int 범위는 상당히 넓다.

Swift 4.2 값 범위 - 소스

print("Int       : \(Int.min) ~ \(Int.max)")
print("Int8      : \(Int8.min) ~ \(Int8.max)")
print("Int16     : \(Int16.min) ~ \(Int16.max)")
print("Int32     : \(Int32.min) ~ \(Int32.max)")
print("Int64     : \(Int64.min) ~ \(Int64.max)")
print("UInt      : \(UInt.min) ~ \(UInt.max)")
print("UInt8     : \(UInt8.min) ~ \(UInt8.max)")
print("UInt16    : \(UInt16.min) ~ \(UInt16.max)")
print("UInt32    : \(UInt32.min) ~ \(UInt32.max)")
print("UInt64    : \(UInt64.min) ~ \(UInt64.max)")
print("CLong     : \(CLong.min) ~ \(CLong.max)")
print("CLongLong : \(CLongLong.min) ~ \(CLongLong.max)")
print("ULONG     : \(ULONG.min) ~ \(ULONG.max)")

 

 

Swift 4.2 값 범위 - 결과

Int : -9223372036854775808 ~ 9223372036854775807

Int8 : -128 ~ 127

Int16 : -32768 ~ 32767

Int32 : -2147483648 ~ 2147483647

Int64 : -9223372036854775808 ~ 9223372036854775807

UInt : 0 ~ 18446744073709551615

UInt8 : 0 ~ 255

UInt16 : 0 ~ 65535

UInt32 : 0 ~ 4294967295

UInt64 : 0 ~ 18446744073709551615

CLong : -9223372036854775808 ~ 9223372036854775807

CLongLong : -9223372036854775808 ~ 9223372036854775807

ULONG : 0 ~ 4294967295

대부분 보면 결국 Int32 아니면 Int64 범위입니다.

Swift 4.2에선 기본Int 범위가 Int64범위라 이번 문제에선 결국 중간값에대한 형을 변환안해줘되 되요

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

 

[기초-산술연산] 정수 두 개 입력받아 합 출력하기2

+ 연산자를 사용하면 된다. 단, 계산된 결과가 int 데이터형의 표현 범위를 넘어가기 때문에 다른 데이터형을 사용해야 한다. [주의] int 데이터형은 %d로 입출력하고, long long int 데이터형은 %lld로 입출력한다.

codeup.kr

 

 

1040 : [기초-산술연산] 정수 한 개 입력받아 부호 바꿔 출력하기 with Swift

37. 콘솔에서 한 개의 정수를 입력받고 부호를 바꿔 출력 하라.

입력 범위: -2147483647 ~ 2147483647

입력 예시:

-1

출력 예시:

1

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(-value);
	}
}

 

 

Swift 4.2

import Foundation

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

 

 

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

 

[기초-산술연산] 정수 한 개 입력받아 부호 바꿔 출력하기

단항 연산자인 -(negative)를 변수 앞에 붙이면 부호가 반대로 바뀌어 계산된다. [예시] int a; scanf("%d", &a); printf("%d", -a);

codeup.kr

 

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

31. 콘솔에서 8진수를 한 개 입력받아 10진수로 출력하라.

입력 예시

13

출력 예시

11

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String line = scan.nextLine();
		scan.close();
		String clean = line.trim();
		System.out.println(trans8to10(clean));
	}
	
	static public int trans8to10(String str8Value) {
		if(str8Value.length() < 1) {return -1; }
		if(!valueCheck(str8Value)) {
			return -1;
		} else {
			char [] numberArray = str8Value.toCharArray();
			int p = numberArray.length - 1;
			
			int result = 0;
			for (char number : numberArray) {
				int val = Integer.valueOf(String.valueOf(number));
				result += val * ((int) Math.pow(8, p));
				p--;
			}
			return result;
		}	
	}
	
	static public boolean valueCheck(String target) {
		try {
			Integer.valueOf(target);
			return true;
		} catch (Exception e) {
			System.out.println("Error : Main.valueCheck() ->" + e.getLocalizedMessage());
			return false;
		}
	}
}

 

 

Swift 4.2 

import Foundation

func trans8to10(strValue:String) -> Int{
    guard Int(strValue) != nil else { return -1 }
    
    var result = 0;
    var p:Double = Double(strValue.count - 1)
    for number in strValue {
        if let val = Int(String(number)) {
            result += val * Int(pow(Double(8), p))
        }
        p -= 1;
    }
    return result
}

let line = readLine()
if line != nil {
    print(trans8to10(strValue: line!))
}

좀 쓸모없는게 들어간거같고 비효율적으로 느껴집니다.

그렇지만 더 생각하기 귀찮아서 넘어가렵니다.

요즘 딱히 일이없어 잔심부름 같은일 외에 기초100문제 포스팅하다보니 어느새 1/3 지점에 도착해버렸습니다.

이번에도 하다가 그만두고 먼 미래로 남겨두겠지 했는데 페이스를 보니 다음 프로젝트가 저한테 할당되기전까지 놀랍게도 100문제까지 갈지도 모르겠다는 생각이 드네요.

ios13 발표되고 공부해야할게 늘었는데 공부하기 싫어서 이런거난 하고있으니

멀리서 저를 내려다보면 엄청 한심해 보일거같습니다.

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

 

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

int n; scanf("%o", &n); printf("%d", n); (한편, C언어에서 소스 코드 작성시 0으로 시작하는 수는 8진수로 인식된다.)

codeup.kr

 

 

 

 

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

32. 콘솔에서 16진수 정수 한 개를 입력받고 8진수로 바꾸어 출력하라.

입력 예시

f

출력 예시

17

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String line = scan.nextLine();
		scan.close();
		String clean = line.trim();
		System.out.println(trans16to8(clean));
	}
	
	static public String trans16to8(String str16Value) {
		try {
			int converted = Integer.valueOf(str16Value, 16);
			return String.format("%o", converted);
		} catch (Exception e) {
			System.out.println("Err : trans16to8 -> " + e.getLocalizedMessage());
			return "";
		}
	}
}

 

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
}

func alpaTransNumber(alpa:Character) -> Int? {
    switch alpa {
    case "a": return 10
    case "b": return 11
    case "c": return 12
    case "d": return 13
    case "e": return 14
    case "f": return 15
    default: return nil
    }
}

func trans16to10(strValue:String) -> Int?{
    let letters = CharacterSet.letters
    var result = 0;
    var p:Double = Double(strValue.count - 1)
    for number in strValue.unicodeScalars {
        if letters.contains(number) {
            if let val = alpaTransNumber(alpa: Character(number)) {
                result += val * Int(pow(Double(16), p))
            } else {
                print("Err : trans16to10 -> 잘못된 값이 입력됨")
                return nil
            }
        } else {
            if let val = Int(String(number)) {
                result += val * Int(pow(Double(16), p))
            } else {
                print("Err : trans16to10 -> 잘못된 값이 입력됨")
                return nil
            }
        }
        p -= 1;
    }
    return result
}

let line = readLine()
if line != nil {
    if let value = trans16to10(strValue: line!) {
        var printValue = String()
        for number in octalTrans(value: value) {
            printValue += String(number)
        }
        print(printValue)
    }
}

자바는 Integer.valueOf()에 저렇게 변환하는 기능이 있는지 몰랐네요 ㅋㅋㅋ

이전 소스도 다 수정하고싶지만 귀찮으니 그냥 남겨둡니다.

놀다가 우연하게 발견했네요. ㅎㅎ

그렇게 자바쪽은 코드가 확 줄었습니다.

valueOf에 진수 변환기능이 있는지 모르는분들을 위해 잠깐 끄적여 보자면

위 코드에서

int converted = Integer.valueOf(str16Value, 16);

에서 사용했는데,

str16Value라는 문자열이 사실 16진수야! 그러니 10진수로 바꿔주렴

라는 기능이 있다고하네요.

지금도 좀 헷갈려서 쓸날이 올지는 모르겠습니다.

자바를 잘 안만지기도 하니까요.

스위프트 코드는 이전 문제들 코드를 긁어와서 짜집기했습니다.

다시 짜기 귀찮아서요.

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

 

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

int n; scanf("%x", &n); //소문자로 16진수 입력 printf("%o", n); 한편, C언어에서 소스 코드 작성시 0x으로 시작하는 수는 16진수로 인식된다. 또한 소스코드 내에서 //로 시작하면 1줄 설명을 넣을 수 있다. 여러 줄을 설명(주석) 처리할 경우 /* 로 시작해 */로 끝나는 사이에 작성할 수 있다.

codeup.kr

 

 

 

 

1036 : [기초-출력변환] 영문자 한 개 입력받아 10진수로 출력하기 with Swift

33. 콘솔에서 영문자 한 개 를 입력받아 영문자의 아스키 코드 값을 출력해라.

입력 예시

A

출력 예시

65

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String line = scan.nextLine();
		scan.close();
		byte[] bytes = line.getBytes();
		for (byte b : bytes) {
			System.out.println(b);
		}
	}
}

 

 

Swift 4.2

import Foundation

let line = readLine()
if line != nil {
    for scalar in line!.trimmingCharacters(in: .whitespacesAndNewlines).unicodeScalars {
        print(scalar.value)
    }
}

 

 

https://codeup.kr/problem.php?id=1036\

 

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

아스키(ASCII, 미국표준코드, American Standard Code for Information Interchange) 코드표는 영문자, 특수문자 등을 사용할 때 사용하는 표준 코드이다. 컴퓨터로 저장되는 모든 데이터는 2진 정수화되어 저장되는데, 영문자와 특수기호 등을 저장하는 방법으로 아스키코드를 일반적으로 사용한다. 예를 들어 영문 대문자 'A'는 10진수 65에 해당하는 2진수 값으로 저장된다.

codeup.kr

 

 

 

 

1037 : [기초-출력변환] 정수 한 개 입력받아 아스키 문자로 출력하기 with Swift

34. 콘솔에서 10진 정수 한 개(0~255)를 입력 받아 아스키 문자로 출력해보라.

입력 예시

65

출력 예시

A

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int ascii_num = scan.nextInt();
		scan.close();
		System.out.println(String.format("%c", ascii_num));
	}
}

 

Swift 4.2

import Foundation

let line = readLine()
if line != nil {
    if let value = Int(line!){
        if let uni = Unicode.Scalar(value) {
            print(Character.init(uni))
        }
    }
}

 

문뜩 기초100제를 swift로 할만한 이유가 있을까? 라는 의문이 들었습니다.

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

 

[기초-출력변환] 정수 한 개 입력받아 아스키 문자로 출력하기

10진 정수 한 개를 입력받아 아스키문자로 출력하는 프로그램을 작성해보자. (단, 0 ~ 255 범위의 정수만 입력된다.)

codeup.kr

 

 

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

 

+ Recent posts