0이상 10이하를 지정한것인데 for 문은 이러한 범위에서 순서대로 0, 1, 2 가져오며 반복한다는 의미이다.
0 ... 10 이러한 범위 연산자를 폐쇄 범위 연사자라 하며
양 끝이 정해져있다 하여 폐쇄 이다.
그럼 양끝이 정해져있지 않은것도 있다.
Half-Open Range Operator
한글로 뭐라고 번역해야 할지 모르겠다.
위의 폐쇄 범위 연산자와 유사한데
맨 뒤 끝 이전까지 범위를 지정한 것을 일컫는다.
0 ..< 10 이렇게하면 0이상 10미만이다. 점이 이번엔 두개다 중요한 부분이다.
One-sided Ranges( 단측 범위 연산자 )
이번엔 양 끝중 한쪽만 범위를 지정한 것이다.
이미 있는 배열에 대해 범위를 지정할때 이미 양끝이 정해져 있기에 한쪽만 지정해줘서 편하게 사용한다.
위의 폐쇄, 하프오픈 범위 연산자랑 비슷하다.
ex1)
let alphabet = ["A","B","C","D","E"]
for c in alphabet[...2] {
print(c)
}
print()
for c in alphabet[..<2] {
print(c)
}
print()
for c in alphabet[2...] {
print(c)
}
print()
결과:
A
B
C
A
B
C
D
E
첫번째 for문은 alphabet 배열의 처음부터 인덱스2, 그러니까 처음부터 세번째까지 범위를 지정하여
print문에서 A B C가 출력된것이다.
두번째 for문은 alphabet 배열의 처음부터 인덱스2이전까지, 그러니까 처음부터 두번째까지 범위를 지정하여
print문에서 A B가 출력된다.
세번째 for문은 인덱스 2 부터(세번째 부터) 끝까지 범위를 지정하여
print문에서 C D E가 출력되었다
단 2초과에 해당하는 <.. 은 없다
스위프트에는 사용자가 직접 연산자를 지정할 수 있는데 만약 필요하다면 지정해서 사용하면 된다.
이것 외에도 따로 range를 생성해서 지정해줄수 있다.
해당 부분에 대해 알고 싶다면 Range, NSRange에 대해 검색해봄이 좋을듯하다.
난 따로 생성해서 지정할땐 String의 부분을 추출하거나 부분 속성을 변경해줄때만 사용해보고 그외엔 없다.
입력 : 한 줄에 공백으로 두개의 정수가 구분되어 입력된다. 입력되는 정수의 범위는 다음과 같다.
입력 범위 : -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의 범위내에 있다고 생각 할 수 없습니다.
중간식이 단순 연산이라면 금방 눈치를 채겠지만 막 복잡한 식이 들어가면 어느순간에 범위를 넘어서 버릴수도 있습니다.
물론 이러한 문제는 금방 디버깅시에 발견가능하지만 중간값을 생각안하면 디버깅툴에서 알려주는 라인의 오류를 이해를 못할 수 도 있기에
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범위였을때랑 같은 소스다! 잘못한거 아니냐! 라고 말할수 있겠으나
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)
}
}