알고리즘 공부를 위해 코드업 사이트(https://codeup.kr/)의 기초 100제를 시작합니다.

블로그에 올라온 모든 코드는 파이썬(Python)으로 작성되어 있습니다.   

 

Python의 기초 100제를 확인하기 위해서는 다음 사이트로 이동하면 됩니다. 

https://codeup.kr/problemsetsol.php?psid=33 

 

문제집 / Python 기초 100제

 

codeup.kr

 

6056 : [기초-논리연산] 참/거짓이 서로 다를 때에만 참 출력하기(설명)(py)

2개의 정수값이 입력될 때,
그 불 값(True/False) 이 서로 다를 때에만 True 를 출력하는 프로그램을 작성해보자.

 

▷ 참고

참 거짓이 서로 다를 때에만 True 로 계산하는 논리연산을 XOR(exclusive or, 배타적 논리합) 연산이라고도 부른다.

논리연산자는 사칙(+, -, *, /) 연산자와 마찬가지로 여러 번 중복해서 사용할 수 있는데, 
사칙 연산자와 마찬가지로 계산 순서를 표시하기 위해 괄호 ( )를 사용할 수 있다.
괄호를 사용하면 계산 순서를 명확하게 표현할 수 있다.

수학 식에서는 소괄호 (), 중괄호 {}, 대괄호 []를 사용하기도 하지만, 프로그래밍언어에서는 소괄호 ( ) 만 사용한다.

불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로 True(참)/False(거짓) 값만 가지는 논리값과 그 값들 사이의 연산을 다룬다.

 

▷ 해설

배타적 논리합인 XOR의 경우 두 값이 같은 경우 False가 나온다.

즉, a와 b가 모두 True이거나 False인 경우를 제외한 경우인 a는 True지만 b는 False인 경우나 a는 False지만 b는 True인 경우에 최종 결과로 True를 가진다.

위의 표와 같이 전개하게 되면 정상적으로 XOR을 구할 수 있다. 

a, b = input().split()

boolA = bool(int(a))
boolB = bool(int(b))

print((boolA and (not boolB)) or (not boolA and (boolB)))

 

6057 : [기초-논리연산] 참/거짓이 서로 같을 때에만 참 출력하기(설명)(py)

2개의 정수값이 입력될 때,
그 불 값(True/False) 이 서로 같을 때에만 True 를 출력하는 프로그램을 작성해보자.

▷ 해설

먼저 입력받은 값의 bool 값을 구한뒤 관계 연산자를 통해 두 값이 같은지 비교하면 된다.

다음과 같이 == 연산자를 이용하게 되면 True, True의 경우나 False, False의 경우에만 True가 출력된다.

또는 위의 표와 같이 not과 and와 or을 이용하면 답을 구할 수 있다.

a, b = input().split()

boolA = bool(int(a))
boolB = bool(int(b))

print(boolA == boolB)
a, b = input().split()

boolA = bool(int(a))
boolB = bool(int(b))

print(((not boolA) and (not boolB)) or (boolA and boolB))

6058 : [기초-논리연산] 둘 다 거짓일 경우만 참 출력하기(py)

2개의 정수값이 입력될 때,
그 불 값(True/False) 이 모두 False 일 때에만 True 를 출력하는 프로그램을 작성해보자.

 

▷ 해설

(not boolA) and (not boolB)와 not (boolA and boolB)는 같은 의미를 가지고 있다.

a, b = input().split()

boolA = bool(int(a))
boolB = bool(int(b))

print((not boolA) and (not boolB))

 

6059 : [기초-비트단위논리연산] 비트단위로 NOT 하여 출력하기(설명)(py)

입력 된 정수를 비트단위로 참/거짓을 바꾼 후 정수로 출력해보자.
비트단위(bitwise)연산자 ~ 를 붙이면 된다.(~ : tilde, 틸드라고 읽는다.)

비트단위(bitwise) 연산자는,
~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor),
<<(bitwise left shift), >>(bitwise right shift) 가 있다.

예를 들어 1이 입력되었을 때 저장되는 1을 32비트 2진수로 표현하면
        00000000 00000000 00000000 00000001 이고,
~1은 11111111 11111111 11111111 11111110 가 되는데 이는 -2를 의미한다.

 

▷ 참고

컴퓨터에 저장되는 모든 데이터들은 2진수 형태로 바뀌어 저장된다.
0과 1로만 구성되는 비트단위들로 변환되어 저장되는데,
양의 정수는 2진수 형태로 바뀌어 저장되고, 음의 정수는 "2의 보수 표현"방법으로 저장된다.

양의 정수 5를 32비트로 저장하면, 

5의 2진수 형태인 101이 32비트로 만들어져
00000000 00000000 00000000 00000101
로 저장된다.(공백은 보기 편하도록 임의로 분리)

32비트 형의 정수 0은
00000000 00000000 00000000 00000000

그리고 -1은 0에서 1을 더 빼고 32비트만 표시하는 형태로
11111111 11111111 11111111 11111111 로 저장된다.

-2는 -1에서 1을 더 빼면 된다.
11111111 11111111 11111111 11111110 로 저장된다.

이러한 내용을 간단히 표현하면, 정수 n이라고 할 때,

~n = -n - 1
-n = ~n + 1 과 같은 관계로 표현할 수 있다.

이 관계를 그림으로 그려보면 마치 원형으로 수들이 상대적으로 배치된 것과 같다.

 

a = int(input())
print(~a)

 

6060 : [기초-비트단위논리연산] 비트단위로 AND 하여 출력하기(설명)(py)

입력된 정수 두 개를 비트단위로 and 연산한 후 그 결과를 정수로 출력해보자.
비트단위(bitwise)연산자 &를 사용하면 된다.(and, ampersand, 앰퍼센드라고 읽는다.)

 

비트단위(bitwise)연산자는,
~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor),
<<(bitwise left shift), >>(bitwise right shift) 가 있다.

 

▷ 참고

예를 들어 3과 5가 입력되었을 때를 살펴보면
3       : 00000000 00000000 00000000 00000011
5       : 00000000 00000000 00000000 00000101
3 & 5 : 00000000 00000000 00000000 00000001
이 된다.

비트단위 and 연산은 두 비트열이 주어졌을 때,
둘 다 1인 부분의 자리만 1로 만들어주는 것과 같다.

이 연산을 이용하면 어떤 비트열의 특정 부분만 모두 0으로도 만들 수 있는데
192.168.0.31   : 11000000.10101000.00000000.00011111
255.255.255.0 : 11111111.11111111.11111111.00000000

두 개의 ip 주소를 & 연산하면
192.168.0.0 :     110000000.10101000.0000000.00000000 을 계산할 수 있다.

실제로 이 계산은 네트워크에 연결되어 있는 두 개의 컴퓨터가 데이터를 주고받기 위해
같은 네트워크에 있는지 아닌지를 판단하는데 사용된다.

이러한 비트단위 연산은 빠른 계산이 필요한 그래픽처리에서
마스크연산(특정 부분을 가리고 출력하는)을 수행하는 데에도 효과적으로 사용된다.

 

a, b = input().split()
print(int(a) & int(b))

알고리즘 공부를 위해 코드업 사이트(https://codeup.kr/)의 기초 100제를 시작합니다.

블로그에 올라온 모든 코드는 파이썬(Python)으로 작성되어 있습니다.   

 

Python의 기초 100제를 확인하기 위해서는 다음 사이트로 이동하면 됩니다. 

https://codeup.kr/problemsetsol.php?psid=33 

 

문제집 / Python 기초 100제

 

codeup.kr

 

6051 : [기초-비교연산] 정수 2개 입력받아 비교하기4(설명)(py)

두 정수(a, b)를 입력받아
a의 값이 b의 값과 서로 다르면 True 를, 같으면 False 를 출력하는 프로그램을 작성해보자.

 

▷ 참고

어떤 값을 비교하기 위해 비교/관계(comparison/relational) 연산자(operator)를 사용할 수 있다.

비교/관계연산자 != 는
왼쪽의 계산 결과값이 오른쪽의 계산 결과값이 서로 다른 경우 True(참)로 계산하고,
그 외의 경우에는 False(거짓)로 계산한다.

비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고,
그 결과를 True(참), 또는 False(거짓)로 계산해주는 연산자이다.
비교/관계연산자는 <, >, <=, >=, ==(같다), !=(다르다) 6개가 있다.

 

▷ 해설

!는 프로그래밍 문법에서 부정의 의미로 쓰인다. 

그래서 !가 같다는 의미인 =와 같이 사용되면 ==의 반대인 부정의 의미인 같지않다(!=)가 된다

a, b = input().split()
print(int(a) != int(b))

 

6052 : [기초-논리연산] 정수 입력받아 참 거짓 평가하기(설명)(py)

정수가 입력되었을 때, True/False 로 평가해주는 프로그램을 작성해보자.

 

▷ 참고

bool( ) 을 이용하면 입력된 식이나 값을 평가해 불 형의 값(True 또는 False)을 출력해준다.
식이나 값을 계산해서 결과값이 만들어지는 것을 평가(evaluate)라고 한다. 

python 언어에서 정수값 0은 False(거짓)로 평가되고, 그 외의 값들은 모두 True(참)로 평가된다.


불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로 True(참)/False(거짓) 값만 가지는 논리값과 그 값들 사이의 연산을 다룬다.

 

▷ 해설

참과 거짓을 비교하기 위해서 bool함수를 이용하면된다.

bool함수는 0과 빈문자열 ''같은 값을 제외한 모든 값을 True로 가진다.

n = int(input())
print(bool(n))

 

6053 : [기초-논리연산] 참 거짓 바꾸기(설명)(py)

정수값이 입력될 때,
그 불 값을 반대로 출력하는 프로그램을 작성해보자.

 

▷ 참고

a = bool(int(input()))
와 같은 형태로 겹쳐 작성하면, 한 번에 한 단계씩 계산/처리/평가된다.
위와 같은 명령문의 경우 input( ), int( ), bool( ) 순서로 한 번에 한 단계씩 계산/처리/평가된다.

어떤 불 값이나 변수에 not True, not False, not a 와 같은 계산이 가능하다.

참 또는 거짓의 논리값을 역(반대)으로 바꾸기 위해서 not 예약어(reserved word, keyword)를 사용할 수 있다.

이러한 논리연산을 NOT 연산(boolean NOT)이라고도 부르고,
프라임 '(문자 오른쪽 위에 작은 따옴표), 바(기호 위에 가로 막대), 문자 오른쪽 위에 c(여집합, complement) 등으로 표시한다.
모두 같은 의미이다.

참, 거짓의 논리값 인 불(boolean) 값을 다루어주는 예약어는 not, and, or 이 있고,
불 값들 사이의 논리(not, and, or) 연산 결과도 마찬가지로 True 또는 False 의 불 값으로 계산 된다.

정수값 0은 False 이고, 나머지 정수 값들은 True 로 평가된다.
빈 문자열 "" 나 ''는 False 이고, 나머지 문자열들은 True 로 평가된다.

불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로 True(참)/False(거짓) 값만 가지는 논리값과 그 값들 사이의 연산을 다룬다.

 

▷ 해설

비교관계 연산자의 결과나 bool함수의 결과의 반대 값을 구하기 위해서는 not 예약어를 이용한다.

n = int(input())
print(not bool(n))

 

6054 : [기초-논리연산] 둘 다 참일 경우만 참 출력하기(설명)(py)

2개의 정수값이 입력될 때,
그 불 값이 모두 True 일 때에만 True 를 출력하는 프로그램을 작성해보자.

 

▷ 참고

and 예약어는 주어진 두 불 값이 모두 True 일 때에만 True 로 계산하고, 나머지 경우는 False 로 계산한다.
이러한 논리연산을 AND 연산(boolean AND)이라고도 부르고, · 으로 표시하거나 생략하며, 집합 기호 ∩(교집합, intersection)로 표시하기도 한다. 
모두 같은 의미이다.

참, 거짓의 논리값 인 불(boolean) 값을 다루어주는 예약어는 not, and, or 이 있고,
불 값들 사이의 논리(not, and, or) 연산 결과도 마찬가지로 True 또는 False 의 불 값으로 계산된다.

불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로 True(참)/False(거짓) 값만 가지는 논리값과 그 값들 사이의 연산을 다룬다.

 

▷ 해설

두 값이 모두 참일 때에만 True를 가지는 AND 연산을 이용하면 두 값이 모두 참인지 알 수 있다.

참고로 대부분의 프로그래밍 문법은 python과는 달리 AND를 &&로 표현한다.

a, b = input().split()

a = int(a)
b = int(b)
print(bool(a) and bool(b))

 

6055 : [기초-논리연산] 하나라도 참이면 참 출력하기(설명)(py)

2개의 정수값이 입력될 때,
그 불 값이 하나라도 True 일 때에만 True 를 출력하는 프로그램을 작성해보자.

 

▷ 참고

or 예약어는 주어진 두 불 값 중에서 하나라도 True 이면 True 로 계산하고, 나머지 경우는 False 로 계산한다.
이러한 논리연산을 OR 연산(boolean OR)이라고도 부르고, + 로 표시하거나, 집합 기호 ∪(합집합, union)로 표시하기도 한다.
모두 같은 의미이다.

참, 거짓의 논리값 인 불(boolean) 값을 다루어주는 예약어는 not, and, or 이 있고,
불 값들 사이의 논리(not, and, or) 연산 결과도 마찬가지로 True 또는 False 의 불 값으로 계산된다.

불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로 True(참)/False(거짓) 값만 가지는 논리값과 그 값들 사이의 연산을 다룬다.

▷ 해설

두 값 중 하나라도 참인 경우 True를 가지는 OR 연산을 이용하면 두 값 중 하나라도 참인지 알 수 있다.

참고로 대부분의 프로그래밍 문법은 python과는 달리 OR을 ||로 표현한다.

a, b = input().split()

a = int(a)
b = int(b)
print(bool(a) or bool(b))

알고리즘 공부를 위해 코드업 사이트(https://codeup.kr/)의 기초 100제를 시작합니다.

블로그에 올라온 모든 코드는 파이썬(Python)으로 작성되어 있습니다.   

 

Python의 기초 100제를 확인하기 위해서는 다음 사이트로 이동하면 됩니다. 

https://codeup.kr/problemsetsol.php?psid=33 

 

문제집 / Python 기초 100제

 

codeup.kr

 

6046 : [기초-비트시프트연산] 정수 1개 입력받아 2배 곱해 출력하기(설명)(py)

정수 1개를 입력받아 2배 곱해 출력해보자.

 

▷ 참고

*2 를 계산한 값을 출력해도 되지만,
정수를 2배로 곱하거나 나누어 계산해 주는 비트단위시프트연산자 <<, >>를 이용할 수 있다.
컴퓨터 내부에는 2진수 형태로 값들이 저장되기 때문에,
2진수 형태로 저장되어 있는 값들을 왼쪽(<<)이나 오른쪽(>>)으로
지정한 비트 수만큼 밀어주면 2배씩 늘어나거나 1/2로 줄어드는데,

왼쪽 비트시프트(<<)가 될 때에는 오른쪽에 0이 주어진 개수만큼 추가되고,
오른쪽 비트시프트(>>)가 될 때에는 왼쪽에 0(0 또는 양의 정수인 경우)이나 1(음의 정수인 경우)이 개수만큼 추가되고,
가장 오른쪽에 있는 1비트는 사라진다.

 

▷ 예시

n = 10
print(n<<1)  #10을 2배 한 값인 20 이 출력된다.
print(n>>1)  #10을 반으로 나눈 값인 5 가 출력된다.
print(n<<2)  #10을 4배 한 값인 40 이 출력된다.
print(n>>2)  #10을 반으로 나눈 후 다시 반으로 나눈 값인 2 가 출력된다.

정수 10의 2진수 표현은 ... 1010 이다.
10 << 1 을 계산하면 ... 10100 이 된다 이 값은 10진수로 20이다.
10 >> 1 을 계산하면 ... 101 이 된다. 이 값은 10진수로 5이다.

n = 10 과 같이 키보드로 입력받지 않고 직접 작성해 넣은 코드에서, 숫자로 시작하는 단어(식별자, identifier)는 자동으로 수로 인식된다.  

n = 10 에서 10 은 10진수 정수 값으로 인식된다.
변수 n 에 문자열을 저장하고 싶다면, n = "10" 또는 n = '10'으로 작성해 넣으면 되고,

 

n = 10.0 으로 작성해 넣으면 자동으로 실수 값으로 저장된다.
n = 0o10 으로 작성해 넣으면 8진수(octal) 10으로 인식되어 10진수 8값이 저장되고,
n = 0xf 나 n = 0XF 으로 작성해 넣으면 16진수(hexadecimal) F로 인식되어 10진수 15값으로 저장된다.

** python에서 실수 값에 대한 비트시프트 연산은 허용되지 않고 오류가 발생한다.
(실수 값도 컴퓨터 내부적으로는 2진수 형태로 저장되고 비트시프트 처리가 될 수 있지만, python 에서는 허용하지 않는다.)

 

n = int(input())
print(n*2)
n = int(input())
print(n<<1)

 

6047 : [기초-비트시프트연산] 2의 거듭제곱 배로 곱해 출력하기(설명)(py)

정수 2개(a, n)를 입력받아 a를 2ⁿ배 곱한 값으로 출력해보자.
0 <= a <= 10, 0 <= n <= 10

 

▷ 참고

예를 들어 1 3 이 입력되면 1을 2³(=8)배 하여 출력한다.

 

▷ 해설

비트 시프트 연산을 이용하면 반복문 없이도 2의 n승을 쉽게 구할 수 있다.

 

a, n = input().split()

a = int(a)
n = int(n)

print(a<<n)

 

6048 : [기초-비교연산] 정수 2개 입력받아 비교하기1(설명)(py)

두 정수(a, b)를 입력받아
a가 b보다 작으면 True 를, a가 b보다 크거나 같으면 False 를 출력하는 프로그램을 작성해보자.

 

▷ 참고

어떤 값을 비교하기 위해 비교/관계(comparison/relational) 연산자(operator)를 사용할 수 있다.

비교/관계연산자 < (less than sign) 는
왼쪽의 값이 오른쪽 값 보다 작은 경우 True(참)로 계산하고,
그 외의 경우에는 False(거짓)로 계산한다.

비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고,
그 결과를 True(참), 또는 False(거짓)로 계산해 주는 연산자이다.

비교/관계연산자는 <, >, <=, >=, ==(같다), !=(다르다) 6개가 있다.

True(참) 또는 False(거짓) 값으로만 표현하고 저장하는 값을 불(bool)/불리언(boolean) 값이라고 한다.
정수, 실수, 문자, 문자열과 마찬가지로 또 다른 형태의 데이터형(data type)이다.

 

▷ 해설

비교 연산자를 이용하면 그 결과가 True나 False로 나온다.

비교 연산자는 주로 반복문과 조건문에 사용되고 있다.

a, b = input().split()

print(int(a)<int(b))

 

6049 : [기초-비교연산] 정수 2개 입력받아 비교하기2(설명)(py)

두 정수(a, b)를 입력받아
a와 b의 값이 같으면 True 를, 같지 않으면 False 를 출력하는 프로그램을 작성해보자.

 

▷ 참고

어떤 값을 비교하기 위해 비교/관계(comparison/relational) 연산자(operator)를 사용할 수 있다.

비교/관계연산자 == (equal sign 2개) 는
왼쪽의 계산 결과값과 오른쪽의 계산 결과값이 같은 경우 True(참)로 계산하고,
그 외의 경우에는 False(거짓)로 계산한다.

비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고,
그 결과를 True(참), 또는 False(거짓)로 계산해 주는 연산자이다.

비교/관계연산자는 <, >, <=, >=, ==(같다), !=(다르다) 6개가 있다.

** 수학에서 왼쪽과 오른쪽의 계산 결과가 같음(동치)을 나타내는 기호 =(equal sign) 1개는
프로그래밍언어에서는 전혀 다른 의미로 사용된다.

a = 1 와 같은 표현은 a와 1의 값이 같다는 의미가 아니라
오른쪽의 계산 결과값인 1을 왼쪽의 변수 a에 저장하라는 의미이다.

 

▷ 해설

'같다'를 우리는 '=' 부호로 사용하지만 문법에서 '='는 대입연산자로 사용되고 있으므로 수의 동치를 의미하는 "같다(동치)"는 "=="으로 사용하고 있다.

동치를 확인하는 연산자는 관계 연산자이므로 결과가 True와 False가 나온다. 

a, b = input().split()
print(int(a) == int(b))

 

6050 : [기초-비교연산] 정수 2개 입력받아 비교하기3(설명)(py)

두 정수(a, b)를 입력받아
b의 값이 a의 값 보다 크거나 같으면 True 를, 같지 않으면 False 를 출력하는 프로그램을 작성해보자.

 

▷ 참고

어떤 값을 비교하기 위해 비교/관계(comparison/relational) 연산자(operator)를 사용할 수 있다.

비교/관계연산자 <= 는
오른쪽의 계산 결과값이 왼쪽의 계산 결과값보다 크거나 같은 경우 True(참)로 계산하고,
그 외의 경우에는 False(거짓)로 계산한다.

<=, >= 연산자는 같음(==)을 포함한다. 따라서 “작다/크다” 거나 "같다”는 의미를 가진다.
작다(<)/크다(>)/다르다(!) 기호는 등호(=)와 함께 왼쪽에 붙여써야 한다.

비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고,
그 결과를 True(참), 또는 False(거짓)로 계산해주는 연산자이다.
비교/관계연산자는 <, >, <=, >=, ==(같다), !=(다르다) 6개가 있다.

 

▷ 해설

수가 작은지 큰지만을 구하는거에서 나아가 작거나 같은지, 작거나 큰지를 구하기 위해서는 >=, <=와 같이 대소구분 뒤에 =을 붙여준다.

비교 연산자이므로 결과가 True와 False가 나온다. 

a, b = input().split()

print(int(a) <= int(b))

알고리즘 공부를 위해 코드업 사이트(https://codeup.kr/)의 기초 100제를 시작합니다.

블로그에 올라온 모든 코드는 파이썬(Python)으로 작성되어 있습니다.   

 

Python의 기초 100제를 확인하기 위해서는 다음 사이트로 이동하면 됩니다. 

https://codeup.kr/problemsetsol.php?psid=33 

 

문제집 / Python 기초 100제

 

codeup.kr

 

6041 : [기초-산술연산] 정수 2개 입력받아 나눈 나머지 계산하기(설명)(py)

정수 2개(a, b) 를 입력받아 a를 b로 나눈 나머지를 출력해보자.

 

▷ 참고

python 언어에서는 나눈 나머지를 계산하는 연산자(%, remainder)를 제공한다.
a%b 와 같이 작성하면, a를 b로 나눈 나머지(remainder)를 계산해준다.
나머지 연산(modulus, mod 연산)은 수학자 가우스가 생각해 낸 연산으로,
어떤 수를 다른 수로 나누고 난 후 남는 나머지를 계산하는 연산이다.

실수로 나눈 나머지가 어떻게 계산될지도 생각해보자.

 

 

▷ 해설

코드를 짤때 나머지를 구하는 %는 자주 사용된다.

주로 사용되는 방법으로는 홀수는 2로 나눈 나머지 값이 1 이므로  n % 2 == 1 짝수는 2로 나눈 나머지 값이 0 이므로 n % 2 == 0이 된다. 

a, b = input().split()
c = int(a) % int(b)

print(c)

 

6042 : [기초-값변환] 실수 1개 입력받아 소숫점이하 자리 변환하기(설명)(py)

실수 1개를 입력받아
소숫점 이하 두 번째 자리까지의 정확도로 반올림한 값을 출력해보자.

 

▷ 참고

format(수, ".2f") 를 사용하면 원하는 자리까지의 정확도로 반올림 된 실수 값을 만들어 준다.

여기서 만들어진 값은 소수점 아래 3번째 자리에서 반올림한 값이다.

컴퓨터 프로그래밍에서 실수 변환이나 실수를 사용하는 계산은
정확하게 변환되거나 계산되는 것이 아니라, 거의 모두 근사값으로 계산되는 것이라고 할 수 있다. 

실수가 컴퓨터로 저장되기 위해서는 디지털방식으로 2진 정수화되어 저장되어야 하는데,
그 과정에서 아주 작은 부분이 저장되지 않고 사라지는 잘림(truncation) 오차가 자주 발생하기 때문이다.

 

▷ 해설

포맷팅 방법으로 실수의 표현방식을 정할 수 있다.

실수의 포맷팅은 format(0.222222, ".4f") 다음과 같이 이용하면 소수점 아래 5자리에서 반올림한 값인 소수점 4자리 까지의 결과인 0.2222가 나온다.

 

python 3부터는 format의 경우 str에서 자주 사용된다. str.format(문자열 중간에 들어갈 문자,...)

"Python {} Hello {} ".format(3, "World")

다음과 같이 문자열의 중괄호({})부분에 format함수에 넣은 값이 차례대로 들어간다.

쉼표(,)로 들어갈 문자를 구분하며 숫자의 경우 따옴표(")를 생략해도 되지만 문자는 반드시 따옴표로 구분해야한다. 

f = float(input())
print(format(f,".2f"))

 

6043 : [기초-산술연산] 실수 2개 입력받아 나눈 결과 계산하기(py)

실수 2개(f1, f2)를 입력받아
f1 을 f2 로 나눈 값을 출력해보자. 이 때 소숫점 넷째자리에서 반올림하여 무조건 소숫점 셋째 자리까지 출력한다.

 

▷ 참고

python 언어에는 나눗셈(division)을 계산하는 연산자(/)가 있다.

컴퓨터 프로그래밍에서 실수 변환이나 실수를 사용하는 계산은 
정확하게 변환되거나 계산되는 것이 아니라, 거의 모두 근사값으로 계산되는 것이라고 할 수 있다.  

실수가 컴퓨터로 저장되기 위해서는 디지털방식으로 2진 정수화되어 저장되어야 하는데, 
그 과정에서 아주 작은 부분이 저장되지 않고 사라지는 잘림(truncation) 오차가 자주 발생하기 때문이다.

계산 결과값 중에서 믿을 수 있는 숫자의 개수를 의미하는, 유효숫자에 대해 찾아보자. 
과학실험에서 온도나 부피를 측정할 때에도 유효숫자는 중요하다. 

 

▷ 해설

이번 문제에서는 앞에서 배웠던 두 수의 연산과 실수의 포맷팅에 대해서 다루고 있다.

문제를 풀기 위해 입력받은 값을 float형으로 바꾸는 형변환을 한뒤 두 실수를 나눠 준다 이후 format을 통해 소수점 아래 3자리만 출력하면 문제를 해결할 수 있다.

f1, f2 = input().split()
result = float(f1) / float(f2)

print(format(result, '.3f'))

 

6044 : [기초-산술연산] 정수 2개 입력받아 자동 계산하기(py)

정수 2개(a, b)를 입력받아 합, 차, 곱, 몫, 나머지, 나눈 값을 자동으로 계산해보자.
단 0 <= a, b <= 2147483647, b는 0이 아니다.

 

▷ 해설

python에서 쓸 수 있는 산술연산에 대해서 모두 구하면 된다.

단, 실수가 나오는 경우 소수점 두번째 자리까지 구한다는 출력조건이 존재하므로 정수의 연산에서 실수가 나올 수 있는 나눗셈은 포맷팅을 통해 출력 형식을 지정한다.

a, b = input().split()

a = int(a)
b = int(b)

add = a + b # 합 Add
sub = a - b # 차 Subtract
mul = a * b # 곱 Multiply
q = a // b  # 몫 Quotient
mod = a % b # 나머지 Modulo
div = a / b # 나눗셈 Divide

print(add)
print(sub)
print(mul)
print(q)
print(mod)
print(format(div,".2f"))

 

6045 : [기초-산술연산] 정수 3개 입력받아 합과 평균 출력하기(설명)(py)

정수 3개를 입력받아 합과 평균을 출력해보자.

 

▷ 참고

공백으로 구분된 한 줄로 값들을 입력받기 위해서는
a, b, c = input().split()
과 같은 방법이 가능하고,

공백으로 구분해 두 값을 출력하기 위해서는
print(d, e)
와 같은 방법이 가능하다.

잘라낸 값들은 그 값의 특성(정수, 실수, 문자, 문자열 ...)에 따라 명확하게 변환시킨 후 사용하는 것이 좋다.

python 프로그래밍을 처음 배울 때 좋은 습관(단계)
1. 입력된 문자열을 정확하게 잘라낸다.(공백, 줄바꿈, 구분문자 등에 따라 정확하게 잘라낸다.)
2. 잘라낸 데이터들을 데이터형에 맞게 변환해 변수에 저장한다. (정수, 실수, 문자, 문자열 등에 따라 정확하게 변환한다.)
3. 값을 저장했다가 다시 사용하기 위해, 변수를 이용해 값을 저장하고, 변수를 이용해 계산을 한다.
4. 원하는 결과 값을 필요한 형태로 만들어 출력한다.(공백, 줄바꿈, 구분자, 등에 따라 원하는 형태로 만들어 출력한다.)

 

▷ 해설

값을 모두 더한 뒤 입력 받는 변수의 갯수인 3으로 나눠주면 평균을 얻을 수 있다.

단, 전의 문제와 마찬가지로 출력조건이 붙어있는걸 확인할 수 있다. 그래서 평균을 구할때 포맷팅을 통해 소수점 두번째 자리까지 출력해야한다.

 

알고리즘 문제를 풀때 읽고 바로 푸는것 보다는 문제의 아래에 적혀있는 입력형식과 출력형식을 반드시 확인하고 코드를 짜는 습관을 들여야 문제가 틀리는 경우를 줄일 수 있다.

a, b, c = input().split()

sum = int(a) + int(b) + int(c)

print(sum, format(sum/3,'.2f'))

 

+ Recent posts