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

 

+ Recent posts