#include <stdio.h>
int main() {
int v1 = 0 , v2 = 35, v3=29;
if ( v1 > v2 ? v2 : v1) {
v2 = v2 << 2;
}
else {
v3 = v3 << 2;
}
printf("%d", v2+v3)
}
🖍 151
①condition ? IfTrue : IfFalse
v1 > v2 = 0 > 35
는 거짓이므로 else 구문으로 이동.
②v3 << 2
에서 v3 = 29이므로 29를 2진수로 바꾸면 11101.
∴ 2만큼 비트를 왼쪽으로 이동시키면 1110100.
③ 1110100를 다시 10진수로 변환하면 116, ∴ v3 = 116.
④v2+v3 = 35 + 116
, ∴ 151Shift operator
shift-expression << additive-expression
: shift-expression에 비트가 additive-expression에 의해 지정된 위치 수만큼 왼쪽으로 이동하는 연산자. 시프트 연산으로 비워진 비트 위치는 0으로 채워짐.
예)int x=11; printf("%d", x<<3);
① 11을 2진수로 바꾸면 1011,
② 왼쪽으로 3비트 이용하면 1011000,
③ 1011000를 10진수로 바꾸면 88.shift-expression >> additive-expression
: shift-expression에 비트 패턴이 additive-expression에 의해 지정된 수만큼 오른쪽으로 이동하는 연산자.
부호가 없는 숫자는 시프트 연산으로 비워진 비트 위치는 0으로 채워지고, 부호가 있는 숫자의 경우 부호 비트는 비워진 비트 위치를 채우는 데 사용됨. 즉, 숫자가 양수이면 0이 사용되고 숫자가 음수이면 1 사용.
예)int x=11; printf("%d", x>>1);
① 11을 2진수로 바꾸면 1011
② 오른쪽으로 1비트 이용하면 101,
③ 101를 10진수로 바꾸면 5.
Bit operator
&
: AND 연산자,|
: OR 연산자, 비트 값이 하나라도 1이면 해당 비트 값은 1^
: XOR 연산자, 비트 값이 서로 다르면 해당 비트 값은 1~
: NOT 연산자, 비트의 값을 반대로 바꾸는 연산자
㉠ 기능 응집도, ㉡ 교환 응집도, ㉢ 우연 응집도, ㉣ 시간 응집도
🖍 ㉠ → ㉡ → ㉣ → ㉢
Cohesion(응집도)
응집도는 모듈의 내부 요소들이 서로 관련되어 있는 정도이다.
- 응집도도가 강할수록 품질이 높고, 약할수록 품질이 낮음
- 기능적 응집도 > 순차적 응집도 > 교환적 응집도 > 절차적 응집도 > 시간적 응집도 > 논리적 응집도 > 우연적 응집도
📌 (우)리 (논)산 (시)(절) 기억나? (교)자, (순)대 (기)대 했었는데- Tpyes of Cohesion
- Functional Cohesion(기능적 응집도) : 하나의 기능에 밀접하게 관련되어 있거나 연관되어 있을 때의 응집도
- Sequential Cohesion(순차적 응집도) : 모듈 내 하나의 할동으로부터 나온 출력 데이터를 그다음 활동의 입력 데이터로 사용할 경우의 응집도
- Communication Cohesion(교환[통신]적 응집도) : 서로 다른 기능을 수행하지만 동일한 입력과 출력을 사용할 때의 응집도
- Procedural Cohesion(절차적 응집도) : 내부의 요소들이 기능적으로 연관성은 없으나, 순차적으로 실행될 때의 응집도
- Temporal Cohesion(시간적 응집도) : 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성할 경우의 응집도
- Logical Cohesion(논리적 응집도) : 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우의 응집도
- Coincidental Cohesion(우연적 응집도) : 모듈 내부의 각 구성 요소들이 서로 관련 없는 요소로만 구성된 경우의 응집도
original_str = ['A','B','C','D','E','F','G','H']
original_str.reverse()
for i in range(1, len(original_str), 2):
print(original_str[i], end='')
🖍 GECA
reverse()
: 리스트 타입에서 제공하는 함수로 리스트를 역순으로 뒤집어줌.
리스트 값을 반환하는 것이 아니라 리스트 자체를 변환시킴.
예를 들어,l = [35, 55, 75]
라는 리스트가 있을 때,print(l.reverse())
는None
으로 출력됨.slice
List or Tuple의 원소 일부를 연속해서 또는 일정한 간격으로 꺼내 새로운 List or Tuple을 만드는 것.
original_str = "ABCDEFGH" reversed_str = original_str[::-1] print(reversed_str[1::2])
- indexing: 0부터 시작
- s[:] : list s의 원소를 모두 출력
- s[:n] : 맨 앞부터 n-1 번까지 출력
- s[n:]: n 번째부터 맨 끝까지 출력
- s[-n:] : 뒤에서 n번째부터 맨 끝까지 출력
- s[::k] : 맨 앞부터 k개씩 건너뛰며 출력
- s[::-1] : 맨 끝부터 전부 출력
- https://www.notion.so/Python-8d22ed2b06bc4c77895b09bcf70a551c?pvs=4
reversed()
- python의 내장함수로 리스트에서 제공하는 함수가 아님.
original_str = "ABCDEFGH" reversed_str = ''.join(reversed(original_str)) for i in range(1, len(reversed_str), 2): print(reversed_str[i], end='')
'string'.join(list)
: 리스트에 있는 요소 하나 하나를 합쳐, 하나의 문자열로 반환하는 파이썬의 내장함수.reversed()
: 역방향으로 각 문자에 접근하여 루프 돔.len()
: 문자열의 길이 반환하는 함수.range(start, stop, step)
: start부터 stop-1까지 step간격으로 숫자를 생성.'string'.join(list)
''.join(list)
: 구분자를 안 넣은 경우fruits = ['apple', 'banana', 'cherry'] result = ''.join(fruits) print(result) # applebananacherry
','.join(list)
: 구분자를 ','로 넣은 경우fruits = ['apple', 'banana', 'cherry'] result = ', '.join(fruits) print(result) # apple, banana, cherry
참고,
기출 문제 : https://newbt.kr/시험/정보처리기사%2520실기
https://www.youtube.com/watch?v=OObXMmXchEk,
풀이 : 길벗알앤디. 『정보처리기사 실기 단기완성』. 길벗. 2023.
reverse()/reversed() : https://velog.io/@code_angler/Python파이썬-reverse-와-reversed의-차이-and-리스트-튜플을-문자열로-만들기by.-join,