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
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
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
'iOS > CodeUP - 기초100 With Swift' 카테고리의 다른 글
1044, 1045, 1046 [기초-산술연산] 합과 평균 with Swift (0) | 2019.07.22 |
---|---|
1041,1042,1043 [기초-산술연산] 몫,나머지, 다음문자( 아스키 값 ) 연산 with Swift (0) | 2019.07.22 |
1034,1035,1036,1037 [기초-출력변환] 진수 변환 문제 with Swift (0) | 2019.07.12 |
1031,1032,1033 [기초-출력변환] 진수 변환 문제 with Swift (0) | 2019.07.12 |
1028,1029,1030 [기초-데이터형] 입력받아 그대로 출력하기2-3 with Swift (0) | 2019.07.09 |