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

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

입력 범위: -2147483648 ~ 2147483647​

입력 예시

3 5

출력 예시

7

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)
        }
    }
}

 

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

이번 or 연산자는 | 로

둘중하나만 1이면 1이 출력되는 연산자입니다.

0 | 0 = 0

0 | 1 = 1

1 | 0 = 1

1 | 1 = 1

가 이번 진리표? 아니 진리식? 뭐가 됐든 연산 결과의 전부입니다.

배우는 순서가 미묘하네요

not 연산먼저 배우는건 뭐 단일연산자라 그런다 쳐도 and 다음에 xor 다음에 or 음

그냥 제가 어색하단거지 문제가 있다는건 아닙니다.

비트단위논리연산 시리즈가 이걸로 끝나고 다음 문제는 이제 삼항 연산자 시리즈로 들어가니

내일 일하고 시간이 남는다면 하고 오늘은 이만 퇴근준비를 해야겠습니다.

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

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("두 값중 하나는 참이다.")
        }

결과:

이 글이 출력된다

두 값중 하나는 참이다.

 

 

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

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

 

+ Recent posts