58. 콘솔에서 두 개의 정수를 입력받고, 비트단위로 xor 연산을 한 값을 출력하라.

입력 : 1line 으로 2개의 정수가 공백을 두고 입력

입력 범위: -2147483648 ~ 2147483647​

입력 예시

3 5

출력 예시

6

JAVA 

import java.util.Scanner;

public class XOR {

    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 values = line!.split(separator: " ")
    if values.count == 2 {
        if let value0 = Int(values[0]), let value1 = Int(values[1]) {
            print(value0^value1)
        }
    }
}

 

이전 소스에서 연산자만 바꾸었습니다.

그냥 적자면 xor은

두 비트가 하나만 1 일때 1이 나오는 연산입니다. ^기호를 쓰면 불편해 ㅁ로 대체합니다.

0 ㅁ 0 = 0

0 ㅁ 1 = 1

1 ㅁ 0 = 1

1 ㅁ 1 = 0

다양하게 편하게 보고싶으시면 xor 진리표를 검색하시면 빠릅니다.

계속 논리게이트 관련 문제만 나오네요.

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

 

 

 

 

/////

옴기면서 이전 포스팅에 자바 소스가 누락되어있는걸 확인해서 지금 넣었습니다.

하는 프로젝트 자체는 스위프트로 해당 기초 문제 풀기이기에 그닥 상관은 없습니다만 간단한 문제라 바로 넣어봤습니다.

반응형

57. 콘솔에서 두 개의 정수를 입력받고, 비트단위로 and연산을 한 값을 출력하라.

입력 : 1line 으로 2개의 정수가 공백을 두고 입력

입력 범위: -2147483648 ~ 2147483647

입력 예시

3 5

출력 예시

1

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 values = line!.split(separator: " ")
    if values.count == 2 {
        if let value0 = Int(values[0]), let value1 = Int(values[1]) {
            print(value0&value1)
        }
    }
}

 

 

이전에는 불값의 연산에 대해 하더니 이번엔 비트의 연산에대해 쭉 이어서 하는군요.

논리연산 시리즈? 에 대해 공부하고싶으신분은 그냥 논리 게이트를 공부하시는게 빠르실거같습니다.

코드업 기초100제 에서는 코드로 빙 둘러서 문제가 나오니 그냥 이게 프로그래밍 공부에 효과가 있나 싶네요

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

반응형

56. 콘솔에서 한 개의 정수를 입력받고, 비트 단위로 반전시켜 정수로 출력하라.

입력 범위 : -2147483648 ~ 2147483647

입력 예시:

2

출력 예시:

-3

JAVA

import java.util.Scanner;

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

 

 

 

Swfit

 

import Foundation

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

 

연산자를 또 정의하고 해야하나했는데 ~ 연산이 되네요.

이번 문제는 아마도 값의 표현에 대한 방법을 알려주기 위한 문제같습니다

양수의 표현에대한 문제가없지만 음수에 표현에대한 문제를 해결하기위해

어떤 방법을 취하고있는가를 보여주는 문제였습니다.

더 자세히 알고싶으신 분은 "2의 보수" 라는 키워드로 검색하시거나

컴퓨터가 뺄셈을하는 방법에 대해 검색하시면 될것같아요.

점차 다시 일이 생기기 시작해서 이거 100번까지 갈 수 있을지 모르게됬습니다

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

 

 

반응형

55. 콘솔에서 두 개의 정수를 입력받아, 두 값 모두 0 일때만 1을 그외엔 0을 출력하게 하라.

입력 : 1line 으로 2개의 정수가 공백을 두고 입력

입력 범위: 0~1

입력 예시

0 1

출력 예시

0

java

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
	    Boolean value0 = intToBool(scan.nextInt());
	    Boolean value1 = intToBool(scan.nextInt());
		scan.close();
		
		System.out.println(boolToInt(nor(value0,value1)));
	}
	static boolean nor(boolean value0, boolean value1 ) {
		return !value0 && !value1 ? true : false;
	}
	static boolean intToBool(int value) {
		return (value > -1) ? ((value == 0) ? false : true) : false;
	}
	static int boolToInt(boolean value) {
		return value ? 1 : 0;
	}
}

 

 

Swift 4.2

import Foundation

func intToBool(_ value:Int) -> Bool {
    return value > -1 ? (value == 0 ? false : true ): false
}
func nor(_ value0:Bool,_ value1:Bool) -> Bool {
    return !value0 && !value1 ? true : false;
}

let line = readLine()
if line != nil {
    let values = line!.split(separator: " ")
    if values.count == 2 {
        if let value0 = Int(values[0]), let value1 = Int(values[1]) {
            print(String.init(format: "%d", nor(intToBool(value0), intToBool(value1))))
        }
    }
}

 

저번 소스랑 조건만 살짝 다릅니다.

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

반응형

54. 콘솔에서 두 개의 정수가 입력될때 두 값이 서로 같을때만 1이 출력되게하라.

입력 : 1line 으로 두 개의 정수가 공백을 두고 입력된다.

입력 범위 : 0 ~ 1

입력 예시

0 0

출력 예시

1 1

java

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
	    Boolean value0 = intToBool(scan.nextInt());
	    Boolean value1 = intToBool(scan.nextInt());
		scan.close();
		
		System.out.println(boolToInt(xnor(value0,value1)));
	}
	static boolean xnor(boolean value0, boolean value1 ) {
		return value0 == value1 ? true : false;
	}
	static boolean intToBool(int value) {
		return (value > -1) ? ((value == 0) ? false : true) : false;
	}
	static int boolToInt(boolean value) {
		return value ? 1 : 0;
	}
}

 

Swift 4.2

import Foundation

func intToBool(_ value:Int) -> Bool {
    return value > -1 ? (value == 0 ? false : true ): false
}
func xnor(_ value0:Bool,_ value1:Bool) -> Bool {
    return value0 == value1 ? true : false
}

let line = readLine()
if line != nil {
    let values = line!.split(separator: " ")
    if values.count == 2 {
        if let value0 = Int(values[0]), let value1 = Int(values[1]) {
            print(String.init(format: "%d", xnor(intToBool(value0), intToBool(value1))))
        }
    }
}

 

이전 소스에서 부호만 바뀌었습니다.

원래 문제가

"두 가지의 참 또는 거짓이 입력될 때, 참/거짓이 서로 같을 때에만 참이 계산되는 프로그램을 작성해보자!"

인데

짧게 핵심만 풀어 쓰다보니 코드가 참 쓸때없이 논리연산과정을 추가했다고 보이게 되네요.. ㅎㅎ

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

반응형

53. 콘솔에서 두 개의 정수(a,b)가 입력될때, a 와 b가 다를때 둘 중하나가 1일때만 1을 그외엔 0 을 출력하라.

입력: 1line으로 두 개의 정수가 공백을 두고 입력된다.

입력 범위: 0 ~ 1

입력 예시

1 1

출력 예시

0

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
	    Boolean value0 = intToBool(scan.nextInt());
	    Boolean value1 = intToBool(scan.nextInt());
		scan.close();
		
		System.out.println(boolToInt(xor(value0,value1)));
	}
	static boolean xor(boolean value0,boolean value1) {
		return value0 != value1 ? true : false;
	}
	static boolean intToBool(int value) {
		return (value > -1) ? ((value == 0) ? false : true) : false;
	}
	static int boolToInt(boolean value) {
		return value ? 1 : 0;
	}
}

 

Swift 4.2

import Foundation

func intToBool(_ value:Int) -> Bool {
    return value > -1 ? (value == 0 ? false : true ): false
}
func xor(_ value0:Bool,_ value1:Bool) -> Bool {
    return value0 != value1 ? true : false
}

let line = readLine()
if line != nil {
    let values = line!.split(separator: " ")
    if values.count == 2 {
        if let value0 = Int(values[0]), let value1 = Int(values[1]) {
            print(String.init(format: "%d", xor(intToBool(value0), intToBool(value1))))
        }
    }
}

 

이전 소스에서 xor이 추가됐을뿐...

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

반응형

기본연산자 목록에 안넣어버린 논리연산자다.

이전에 데이터 타입 불을 다룰때 잠깐 했던거 같기도하다.

 

논리 연산은

참과 거짓에 대해 연산하는거다 그래서 기본적으로 boolean형식으로 값이 나온다.

 

Logical Not Operator

not 연산은 불 연산을 뒤집는연산이다.

만약 참에 대해 not 을 붙이면 거짓이 되고

거짓에 대해 not을 붙이면 참이된다.

 

not 연산자는 느낌표를 붙이면된다.

 

ex1:

        var target = false
        print(!target)
        
        target = !target
        print(target)

결과:

true

true

 

처음 target이 false이지만 print할때 ! 를, not 연산자를 붙여서 print할땐 true가 출력된다.

그다음엔 target에 !target을 해서 true값으로 변경된다.

 

Logical And Operator

and 연산은 두 불형식 값이 모두 참일때 참으로 결과가 나오는 연산이다.

 

연산자로는 &&를 사용한다.

단 여러 if문이 겹치는형태를 축약하는 형태로 같은 and역할을 하게 끔 할 수도 있다 

ex2)

        let target1 = false
        let target2 = true
        let target3 = true
        
        if target1 && target2 {
            print("이 글은 출력되지 않는다.")
        }
        
        if target2 && target3 {
            print("두 값은 모두 참이다.")
        }
        
        if target2, target3 {
            print("이렇게도 쓴다.")
        }
        
        if target1, target3 {
            print("이 글은 출력되지 않는다.")
        }

결과:

두 값은 모두 참이다.

이렇게도 쓴다.

 

 

 

Logical Or Operator

and를 했으니 이제 or이다.

둘중 하나만 참이면 참으로 결과가 나오는 연산이다.

 

위의 예제를 살짝 바꿔서 아래 예시를 만들어봤다.

 

ex2)

        let target1 = false
        let target2 = true
        let target3 = true
        
        if target1 || target2 {
            print("이 글이 출력된다")
        }
        
        if target2 || target3 {
            print("두 값중 하나는 참이다.")
        }

결과:

이 글이 출력된다

두 값중 하나는 참이다.

 

 

연산자 파트를 모두 끝냈다!

다음엔 어떤 기본 강좌를 할지는 모르겠다.

 

반응형

드디어 기본 연산자 마지막 편이다.

범위연산자가 이전에 한번 잠깐 다룬적이 있다.

 

Closed Range Operator( 폐쇄 범위 연산자)

범위연산자는 말그대로 범위를 정의하는 연산이다

이전에 for 문을 적을때 아래와같은 형태로 적었는데

 

for i in 0 ... 10 {

}

 

0 ... 10 이 부분이 범위 연사자를 사용한 부분이다.

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의 부분을 추출하거나 부분 속성을 변경해줄때만 사용해보고 그외엔 없다.

 

반응형

+ Recent posts