분류 전체보기
- 파이썬 자료 2023.11.20
- [프로그래머스/Lv.0/Python] 코딩테스트 입문문제 2023.11.14
- [프로그래머스/Lv.0/Python] 코딩테스트 기초문제 2023.11.06
- 11. 응용 SW 기초 기술 활용 2023.08.28
- 파이썬 2023.08.18
- 디자인 패턴 2023.07.27
- 1. 요구사항 확인 (문제) 2022.11.25
- 1. 요구사항 확인 2022.11.15
- [백준/python3] if문 2021.03.29
- [백준/python3] 입출력과 사칙연산 2021.03.29
파이썬 자료
[프로그래머스/Lv.0/Python] 코딩테스트 입문문제
프로그래머스-코딩테스트 입문
https://school.programmers.co.kr/learn/challenges/beginner?order=acceptance_desc
코딩테스트 입문 캘린더
DAY 1.사칙연산
Q.두 수의 합
def solution(num1, num2):
return (num1+num2)
Q.두 수의 차
def solution(num1, num2):
return (num1-num2)
Q.두 수의 곱
def solution(num1, num2):
return (num1*num2)
Q.몫 구하기
def solution(num1, num2):
return (num1//num2)
DAY 2.사칙연산, 조건문, 배열
Q.두 수의 나눗셈
def solution(num1, num2):
return (num1/num2)*1000//1
#return int(num1 / num2 * 1000)
Q.숫자 비교하기
def solution(num1, num2):
return 1 if num1==num2 else -1
Q.분수의 덧셈***
def solution(numer1, denom1, numer2, denom2): #**
answer = []
x=numer1*denom2+denom1*numer2
y=denom1*denom2
#약분>최대공약수 : 공통되는 약수 중에서 최대 값
'''
#틀림 ㅠ 왜 ?
for i in range(2,min(x,y)) :
if x%i==0 and y%i==0 :
x=x//i
y=y//i
'''
'''
import math
gcd(): 최대공약수
lcm(): 최소공배수
'''
'''
#for문으로 최대 공약수 찾기
for i in range(min(x,y),0,-1) : #뒤에서 부터
if x%i==0 and y%i==0 :
x=x//i
y=y//i
break
'''
'''
#유클리드 호제법으로 최대 공약수(GCD, Greatest Common Divisor)를 찾기
def euclidean_algorithm(a, b):
# 큰 수와 작은 수를 구분하여 대입
if a < b:
a, b = b, a
# b가 0이 될 때까지 반복
while b != 0:
# a를 b로 나눈 나머지를 a에 대입하고, b에는 이전의 a를 대입
a, b = b, a % b
# 최대 공약수인 a를 반환
return a
'''
'''
#유클리드 호제법2
def gcd(a, b):
while b > 0:
a, b = b, a % b
return a
'''
a=x
b=y
if a<b :
a,b = b,a
while b>0 :
a,b = b, a%b
z=a #최대 공약수
x=x//z
y=y//z
answer.append(x)
answer.append(y)
return answer
Q.배열 두 배 만들기
def solution(numbers):
return [i*2 for i in numbers]
DAY 3.사칙연산, 배열, 수학
Q.나머지 구하기
def solution(num1, num2):
return num1%num2
Q.중앙값 구하기
def solution(array):
answer = 0
x=sorted(array,reverse=True)
answer = x[len(x)//2]
return answer
#sorted(array)[len(array) // 2]
Q.최빈값 구하기***
def solution(array):
answer = 0
'''
#런타임 에러 ㅠ
cont=[0]*(len(array)+1)
for i in array :
cont[i]+=1
maxCont=-1
tmp=[]
for i in range(len(cont)) :
if maxCont<cont[i] :
maxCont=cont[i]
for i in range(len(cont)) :
if cont[i] == maxCont :
tmp.append(i)
if len(tuple(tmp))>1 :
answer = -1
else :
answer = tmp[0]
'''
'''
#런타임 에러 ㅠ
cont=[0]*(len(array)+1) #카운트 배열 생성
for i in array :
cont[i]+=1
maxVal=0 #최빈값 출연 횟수
for i in cont :
if i == max(cont) :
maxVal+=1;
if maxVal > 1 :
answer = -1
else :
answer = cont.index(max(cont))
'''
while len(array)!=0 :
for i,x in enumerate(set(array)) :
array.remove(x)
if i==0 :
return x
return -1
return answer
Q.짝수는 싫어요
def solution(n):
answer = [i for i in range(1,n+1) if i%2!=0]
return answer
#return [i for i in range(1, n+1, 2)]
DAY 4.수학, 배열
Q.피자 나워 먹기 (1)
def solution(n):
answer = 0
i=1
while 7*i<n :
i+=1
answer = i
return answer
'''
if n%7 != 0:
answer = (n//7) + 1
else:
answer = n//7
'''
Q.피자 나워 먹기 (2)
def solution(n):
answer = 0
i=1
while True : #while(1):
if (6*i)%n==0 :
answer=i
break
i+=1
return answer
Q.피자 나워 먹기 (3)
def solution(slice, n):
answer = 0
i=1
while (1):
if (slice*i)>=n :
answer=i
break
i+=1
return answer
Q.배열의 평균값
def solution(numbers):
return sum(numbers)/len(numbers)
DAY 5.수학, 배열
Q.옷가게 할인 받기
def solution(price):
if price>=500000:
price*=0.8
elif price>=300000:
price*=0.9
elif price>=100000:
price*=0.95
return int(price) #return price는 오답
Q.아이스 아메리카노
def solution(money):
answer = []
answer.append(money//5500)
answer.append(money%5500)
return answer
#answer = [money // 5500, money % 5500]
Q.나이 출력
def solution(age):
return 2022-age+1
Q.배열 뒤집기
def solution(num_list):
for i in range (len(num_list)//2) :
num_list[i],num_list[len(num_list)-1-i] = num_list[len(num_list)-1-i], num_list[i]
return num_list
#return num_list[::-1]
#num_list.reverse()
#while(num_list):
# result.append(num_list.pop())
DAY 6.문자열, 반복문, 출력, 배열, 조건문
Q.문자열 뒤집기
def solution(my_string):
answer = ''
for x in my_string :
answer=x+answer
return answer
#return my_string[::-1]
#return ''.join(list(reversed(my_string)))
#for i in range(len(my_string)-1, -1, -1) :
# answer += my_string[i]
Q.직각삼각형 출력하기
n = int(input())
for i in range(1,n+1) :
for j in range(i) :
print("*",sep='',end='')
print()
#for i in range(n):
# print('*'*(i+1))
Q.짝수 홀수 개수
def solution(num_list):
sum1=0
sum2=0
for x in (num_list):
if x%2==0 :
sum1+=1
else :
sum2+=1
answer=[sum1,sum2]
return answer
'''
answer = [0,0]
for n in num_list:
answer[n%2]+=1
'''
Q.문자 반복 출력하기
def solution(my_string, n):
answer = ''
for x in my_string :
answer+=((x)*n)
return answer
#return ''.join(i*n for i in my_string)
DAY 7.문자열, 조건문, 수학, 반복문
Q.특정 문자 제거하기
def solution(my_string, letter):
answer = ''
for x in my_string :
if x!=letter :
answer+=x
return answer
#return my_string.replace(letter, '')
#return ''.join([c for c in my_string if c != letter])
Q.각도기
def solution(angle):
answer = 0
if angle==90:
answer=2
elif angle==180 :
answer=4
elif angle<90:
answer=1
elif angle>90:
answer=3
return answer
Q.양꼬치
def solution(n, k):
answer = 0
if n>=10 and k>0:
k-=n//10
answer+=n*12000 + k*2000
return answer
#return 12000 * n + 2000 * (k - n // 10)
Q.짝수의 합
def solution(n):
answer = 0
for i in range(0,n+1) :
if i%2==0:
answer+=i
return answer
#return sum([i for i in range(2, n + 1, 2)])
DAY 8.배열, 구현, 수학
Q.배열 자르기
def solution(numbers, num1, num2):
return numbers[num1:num2+1]
Q.외계행성의 나이
def solution(age):
answer = ''
for x in str(age) :
tmp=''
if x=='0' : tmp='a'
elif x=='1' : tmp='b'
elif x=='2' : tmp='c'
elif x=='3' : tmp='d'
elif x=='4' : tmp='e'
elif x=='5' : tmp='f'
elif x=='6' : tmp='g'
elif x=='7' : tmp='h'
elif x=='8' : tmp='i'
elif x=='9' : tmp='j'
answer+=tmp
return answer
'''
age = str(age)
age = age.replace("0", "a")
'''
Q.진료순서 정하기
def solution(emergency):
answer = []
tmp=sorted(emergency,reverse=True)
for i in emergency :
answer.append(tmp.index(i)+1)
return answer
#return [sorted(emergency, reverse=True).index(e) + 1 for e in emergency]
Q.순서쌍의 개수
def solution(n):
answer = 0
for i in range(1,n+1) :
if n%i==0 :
answer+=1
return answer
DAY 9.수학, 문자열, 해시, 완전탐색, 조건문
Q.개미 군단
def solution(hp):
answer = 0
while hp>0 :
if hp>=5:
answer+=hp//5
hp=hp%5
elif hp>=3:
answer+=hp//3
hp=hp%3
elif hp>=1:
answer+=hp//1
hp=hp%1
return answer
#return hp // 5 + (hp % 5 // 3) + ((hp % 5) % 3)
Q.모스부호 (1)
def solution(letter):
answer = ''
morse = {
'.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
'--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
'--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
'...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
'-.--':'y','--..':'z'
}
for x in list(letter.split()) :
answer+=morse.get(x)
#answer+=morse[x]
return answer
Q.가위 바위 보
def solution(rsp):
answer = ''
for x in rsp :
if x=='0':
answer+='5'
elif x=='2':
answer+='0'
elif x=='5':
answer+='2'
return answer
'''
d = {'0':'5','2':'0','5':'2'}
return ''.join(d[i] for i in rsp)
'''
Q.구슬을 나누는 경우의 수
def solution(balls, share):
answer = 0
def fac(n):
ret=1
for i in range(1,n+1) :
ret*=i
return ret
answer = fac(balls)//((fac(balls-share))*fac(share))
return answer
'''
서로 다른 n개 중 m개를 뽑는 경우의 수 공식
조합 nCm = (n-m)!*m! 분의 n!
n!
---------
(n-m)!*m!
'''
'''
import math
def solution(balls,share):
return math.comb(balls,share)
'''
DAY 10.조건문, 배열, 수학, 시뮬레이션
Q.점의 위치 구하기
def solution(dot):
answer = 0
x=dot[0]
y=dot[1]
if x>0 :
if y>0:
answer=1
elif y<0:
answer=4
if x<0:
if y>0:
answer=2
elif y<0:
answer=3
return answer
Q.2차원으로 만들기
def solution(num_list, n):
answer=[]
for i in range(0,len(num_list),n) :
answer+=[num_list[i:i+n]]
#answer.append(num_list[i:i+n])
return answer
Q.공 던지기***
def solution(numbers, k):
answer = 0
i=0
cont=0
while (1) :
cont+=1 #횟수
if cont==k:
answer=numbers[i]
break
if i==(len(numbers)-1) :
i=1
elif i==(len(numbers)-2) :
i=0
else :
i+=2
return answer
#return numbers[2 * (k - 1) % len(numbers)]
Q.배열 회전시키기
def solution(numbers, direction):
if direction=='right':
numbers.insert(0,numbers.pop())
elif direction=='left':
numbers.append(numbers.pop(0))
return numbers
DAY 11.수학, 반복문
Q.주사위의 개수***
def solution(box, n):
answer = 0
a,b,c=box
answer = (a//n)*(b//n)*(c//n)
return answer
Q.합성수 찾기
def solution(n):
answer = 0
for i in range(1,n+1):
cont=0
for j in range(1,i+1):
if i%j==0:
cont+=1
if cont>=3:
answer+=1
return answer
Q.최댓값 만들기(1)
def solution(numbers):
maxValue=-2147000000
for i in range(len(numbers)) :
for j in range(i+1,len(numbers)) :
if numbers[i]*numbers[j]>maxValue:
maxValue=numbers[i]*numbers[j]
return maxValue
'''
numbers.sort()
return numbers[-2] * numbers[-1]
numbers = sorted(numbers, reverse=True)
return numbers[0]*numbers[1]
'''
Q.팩토리얼
def solution(n):
answer = 0
i=1
while (1):
answer=i
tmp=1
for j in range(1,i+1) :
tmp*=j
if tmp==n :
break
elif tmp>n:
answer=i-1
break
else :
i+=1
return answer
'''
factorial = 1
while factorial <= n:
answer += 1
factorial = factorial * answer
answer -= 1
'''
DAY 12.문자열, 정렬, 사칙연산, 수학
Q.모음 제거
def solution(my_string):
answer = ''
for x in my_string:
if x=='a' or x=='e' or x=='i' or x=='o' or x=='u':
continue
answer+=x
return answer
'''
vowels = ['a','e','i','o','u']
for vowel in vowels:
my_string = my_string.replace(vowel, '')
'''
Q.문자열 정렬하기 (1)
def solution(my_string):
answer = []
for x in my_string :
if x.isalpha() : #if i.isdigit():
continue
answer.append(int(x))
answer.sort()
return answer
Q.숨어있는 숫자의 덧셈 (1)
def solution(my_string):
answer = 0
for x in my_string :
if x.isdigit():
answer+=int(x)
return answer
Q.소인수분해***
def solution(n):
answer = []
x=2
while x<=n :
if n%x==0 :
if x not in answer :
answer.append(x)
n=n//x
else :
x+=1
return answer
DAY 13.문자열, 배열, 사칙연산, 수학, 조건문
Q.컨트롤 제트
def solution(s):
answer = 0
tmp=s.split()
for i in range(len(tmp)) :
if tmp[i]=="Z":
answer-=int(tmp[i-1])
else :
answer+=int(tmp[i])
return answer
Q.배열 원소의 길이
def solution(strlist):
answer = []
for x in strlist :
answer.append(len(x))
return answer
#return [len(str) for str in strlist]
Q.중복된 문자 제거
def solution(my_string):
answer = ''
tmp=[]
x=list(my_string)
for i in my_string :
if i not in tmp :
tmp.append(i)
answer+=i
return answer
'''
answer = ''
for i in my_string:
if i not in answer:
answer+=i
return answer
'''
Q.삼각형의 완성조건(1)
def solution(sides):
answer = 0
a,b,c=sorted(sides,reverse=True)
if a<b+c:
answer=1
else :
answer=2
return answer
DAY 14.조건문, 반복문, 시뮬레이션, 문자열
Q.가까운 수
def solution(array, n):
answer = 0
minValue=2147000000
for x in array :
if abs(n-x) < minValue :
minValue=abs(n-x)
answer=x
if minValue == abs(n-x) and answer>x:
answer=x
return answer
Q.369게임
def solution(order):
answer = 0
for x in str(order) :
if x=='3' or x=='6' or x=='9':
answer+=1
return answer
Q.암호 해독
def solution(cipher, code):
answer = ''
for i in range(code-1,len(cipher),code) :
answer+=cipher[i]
return answer
# return cipher[code-1::code]
Q.대문자와 소문자
def solution(my_string):
answer = ''
for x in my_string :
if x.isupper():
answer+=x.lower()
elif x.islower():
answer+=x.upper()
return answer
#return my_string.swapcase()
DAY 15.문자열, 해시, 배열, 수학
Q.영어가 싫어요
def solution(numbers):
'''
#왜 안돼 ㅠ ? 실행조차 안됨..
answer = 0
number={"zero":0, "one":1, "two":2, "three":3, "four":4, "five":5, "six":6, "seven":7, "eight":8, "nine":9}
i=1
while len(numbers)>0:
# print(numbers[:i])
#print(number.get(numbers[:i]))
if number.get(numbers[:i]) != None :
nembers=numbers[:i]
i=1
else :
i+=1
'''
nums=["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
for i,n in enumerate(nums):
numbers=numbers.replace(n,str(i))
return int(numbers)
Q.인덱스 바꾸기
def solution(my_string, num1, num2):
my_string=list(my_string)
my_string[num1],my_string[num2] = my_string[num2],my_string[num1]
return ''.join(my_string)
Q.한 번만 등장한 문자
def solution(s):
answer = ''
tmp=[]
for x in s :
if s.count(x)==1 :
tmp.append(x)
tmp=sorted(tmp)
answer=answer.join(tmp)
return answer
Q.약수 구하기
def solution(n):
answer = []
for i in range(1,n+1) :
if n%i==0 :
answer.append(i)
return answer
DAY 16.문자열, 수학, 배열, 조건문
Q.편지
def solution(message):
return len(message)*2
Q.가장 큰 수 찾기
def solution(array):
#answer.append(max(array))
#answer.append(array.index(max(array)))
maxValue=-2147000000
idx=0
for i in range(len(array)) :
if array[i]>maxValue :
maxValue=array[i]
idx=i
answer=[maxValue,idx]
return answer
Q.문자열 계산하기
def solution(my_string):
answer = 0
'''
#런타임 에러ㅠ
a,b,c=(my_string).split()
if str(b)=="+" :
answer=int(a)+int(c)
elif str(b)=="-":
answer=int(a)-int(c)
'''
my_string=my_string.split()
answer=int(my_string[0])
for i in range(2,len(my_string)) :
if my_string[i-1]=="+" :
answer+=int(my_string[i])
elif my_string[i-1]=="-" :
answer-=int(my_string[i])
return answer
#solution=eval
Q.배열의 유사도
def solution(s1, s2):
answer = 0
for i in range (len(s1)) :
for j in range(len(s2)) :
if s1[i]==s2[j] :
answer+=1
break
return answer
#return len(set(s1)&set(s2));
#set()의 & 연산자는 두 집합(sets) 간의 교집합을 반환
'''
for word in s1:
if word in s2:
answer += 1
else:
continue
'''
DAY 17.문자열, 수학, 조건문, 배열, 사칙연산
Q.숫자 찾기
def solution(num, k):
answer = 0
num=str(num)
for i in range(len(num)) :
if int(num[i])==k:
answer=i+1
break
else :
answer=-1
return answer
Q.n의 배수 고르기
def solution(n, numlist):
answer = []
for x in numlist :
if x%n==0 :
answer.append(x)
return answer
#answer = [i for i in numlist if i%n==0]
Q.자릿수 더하기
def solution(n):
answer = 0
n=str(n)
for x in n :
answer+=int(x)
return answer
#return sum(int(i) for i in str(n))
Q.OX퀴즈
def solution(quiz):
answer = []
for x in quiz :
x,a,y,b,z = x.split()
if str(a)=="+" :
if int(x)+int(y)==int(z) :
answer.append('O')
else :
answer.append('X')
elif str(a)=="-" :
if int(x)-int(y)==int(z) :
answer.append('O')
else :
answer.append('X')
return answer
DAY 18.문자열, 수학, 조건문, 정렬
Q.문자열안에 문자열
def solution(str1, str2):
answer = 1 if str1.find(str2)>=0 else 2
return answer
#return 1 if str2 in str1 else 2
Q.제곱수 판별하기
def solution(n):
answer = 0
x=n**(1/2) #제곱근 2분의 1승
if x%1==0: #정수일 경우
answer=1
else :
answer = 2
return answer
Q.세균 증식
def solution(n, t):
answer=n
for i in range(0,t) :
answer*=2
return answer
Q.문자열 정렬하기 (2)
def solution(my_string):
return "".join(sorted(my_string.lower()))
DAY 19.문자열, 배열, 조건문
Q.7의 개수
def solution(array):
answer = 0
for x in array :
for i in range(len(str(x))) :
if str(x)[i]=='7':
answer+=1
return answer
#return str(array).count('7')
Q.잘라서 배열로 저장하기
def solution(my_str, n):
answer = []
for i in range(0,len(my_str),n):
answer.append(my_str[i:i+n])
return answer
Q.중복된 숫자 개수
def solution(array, n):
return array.count(n)
Q.머쓱이보다 키 큰 사람
def solution(array, height):
answer = 0
array.sort()
for x in array :
if x>height :
answer+=1
return answer
'''
array.append(height)
array.sort(reverse=True)
return array.index(height)
'''
DAY 20.수학, 시뮬레이션, 문자열, 사칙연산
Q.직사각형 넓이 구하기
def solution(dots):
answer = 0
a=set()
b=set()
for x in dots :
a.add(x[0])
b.add(x[1])
x=abs(list(a)[0]-list(a)[1])
y=abs(list(b)[0]-list(b)[1])
answer=x*y
return answer
#return (max(dots)[0] - min(dots)[0])*(max(dots)[1] - min(dots)[1])
'''
x, y = [], []
for dot in dots:
x.append(dot[0])
y.append(dot[1])
return (max(x) - min(x)) * (max(y) - min(y))
'''
Q.캐릭터의 좌표
def solution(keyinput, board):
answer = []
dx=[1,0,-1,0]
dy=[0,-1,0,1]
x=0
y=0
print((board[0]//2),(board[1]//2))
for k in keyinput :
if k=="right" :
i=0
elif k=="down" :
i=1
elif k=="left" :
i=2
elif k=="up" :
i=3
if abs(x+dx[i])>(board[0]//2) or abs(y+dy[i])>(board[1]//2) :
continue
x=x+dx[i]
y=y+dy[i]
answer=[x,y]
return answer
Q.최댓값 만들기 (2)
def solution(numbers):
answer = 0
numbers.sort()
answer=numbers[0]*numbers[1]
if answer<(numbers[len(numbers)-1]*numbers[len(numbers)-2]) :
answer=(numbers[len(numbers)-1]*numbers[len(numbers)-2])
return answer
'''
numbers = sorted(numbers)
return max(numbers[0] * numbers[1], numbers[-1]*numbers[-2])
'''
Q.다항식 더하기***
def solution(polynomial):
# if tmpx==1 경우 주의
answer = ''
tmpx=0
tmpc=0
polynomial=polynomial.split(' + ')
for p in polynomial :
'''
if 'x' in p:
tmp=p.replace('x','')
if tmp=='' :
tmpx+=1
else :
tmpx+=int(tmp)
else :
tmpc+=int(p)
'''
if 'x' in p:
if p.isalpha():
tmpx+=1
else :
tmp=p.replace('x','')
tmpx+=int(tmp)
elif p.isdigit() :
tmpc+=int(p)
if tmpx>0 :
if tmpx==1 : #주의
answer+='x'
else :
answer+=str(tmpx)+'x'
if tmpc>0 :
answer+=' + '+str(tmpc)
else :
if tmpc>0 :
answer+=str(tmpc)
return answer
def solution(polynomial):
tmpx = 0
tmpc = 0
for c in polynomial.split(' + '):
if c.isdigit():#상수항
tmpc+=int(c)
else:
tmpx = tmpx+1 if c=='x' else tmpx+int(c[:-1])
if tmpx == 0:
return str(tmpc)
elif tmpx==1:
return 'x + '+str(tmpc) if tmpc!=0 else 'x'
else:
return f'{tmpx}x + {tmpc}' if tmpc!=0 else f'{tmpx}x'
return answer
DAY 21.문자열, 사칙연산, 시뮬레이션, 2차원배열, 수학, 배열
Q.숨어있는 숫자의 덧셈 (2)
def solution(my_string):
answer = 0
for i in range(len(my_string)) :
if my_string[i].isalpha() :
my_string=my_string.replace(my_string[i],' ')
my_string = list(map(int,my_string.split()))
answer = sum(my_string)
return answer
Q.안전지대***
def solution(board):
answer = 0
dx=[-1,0,1,1,0,0,-1,-1]
dy=[0,1,0,0,-1,-1,0,0]
n=len(board)
tmp=[]
'''
for i in board :
print(i)
'''
#지뢰 위치 파악
for i in range(n):
for j in range(n) :
if board[i][j]==1 :
tmp.append([i,j])
for t in tmp :
x,y=t #지뢰 위치
for i in range(8) :
'''
#틀림 ㅠ
if(x+dx[i]>=n or y+dy[i]>=n or x+dx[i]<0 or y+dy[i]<0) :
continue
x=x+dx[i]
y=y+dy[i]
if board[x][y]==1 :
continue
board[x][y]=1
'''
x=x+dx[i]
y=y+dy[i]
if 0 <= x < n and 0 <= y < n:
board[x][y] = 1
#안전지대 카운팅
for i in range(n):
for j in range(n):
if board[i][j]==0:
answer+=1
return answer
Q.삼각형의 완성조건 (2)
def solution(sides):
answer = 0
#가장 큰 변의 길이 값이 sides 안에 있는 경우
for i in range(max(sides)-min(sides)+1,max(sides)+1):
answer+=1
#아닌 경우
for i in range(max(sides)+1,max(sides)+min(sides)):
answer+=1
return answer
Q.외계어 사전
def solution(spell, dic):
answer = 2
for d in dic :
if len(set(spell)-set(d))==0 : #차집합
#if not (set(spell)-set(d)) : #차집합
answer=1
break
return answer
DAY 22.dp, 수학, 조건문, 배열
Q.저주의 숫자 3
def solution(n):
answer = 0
i=1 #3x 마을에서 쓰는 숫자
cont=1 #10진법
while cont<=n :
#print('10진법 : ', cont , ' 3x 마을: ',i)
if(cont==n) :
answer = i
if (str(i).find('3')>=0) or (i%3==0) :
#if i % 3 and '3' not in str(i):
i+=1
else :
cont+=1
i+=1
return answer
Q.평행***
def solution(dots):
answer = 0
#기울기가 같다면 평행
#기울기 = y좌표의차이/x좌표의차이
cont=1
while cont<=3 :
if cont==1 :
d1,d2,d3,d4 = dots[0],dots[1],dots[2],dots[3]
if cont==2 :
d1,d2,d3,d4 = dots[0],dots[2],dots[1],dots[3]
if cont==3 :
d1,d2,d3,d4 = dots[0],dots[3],dots[1],dots[2]
l1=(d1[1]-d2[1])/(d1[0]-d2[0])
l2=(d3[1]-d4[1])/(d3[0]-d4[0])
'''
if d1[1]-d2[1]==0 or d1[0]-d2[0]==0 :
l1=0
else :
l1=(d1[1]-d2[1])/(d1[0]-d2[0])
if d3[1]-d4[1]==0 or d3[0]-d4[0]==0 :
l2=0
else :
l2=(d3[1]-d4[1])/(d3[0]-d4[0])
'''
if l1==l2:
return 1
cont+=1
return answer
Q.겹치는 선분의 길이***
def solution(lines):
answer = 0
'''
tmps=[]
for l in lines :
tmp=[]
for i in range(min(l),max(l)) :
tmp.append(i)
tmps.append(set(tmp))
print('tmps:',tmps) # [{0}, {2, 3, 4}, {3, 4, 5, 6, 7, 8}]
'''
'''
집합(set) 자료형
교집합 s1 & s2
합집합 s1 | s2
차집합 s1 - s2
값 1개 추가하기 - add(): add(1)
값 여러 개 추가하기 - update() : s1.update([4, 5, 6])
특정 값 제거하기 - remove() : s1.remove(2)
'''
sets=[ set(range(min(l),max(l))) for l in lines] #range(min(l), max(l)): 최소값과 최대값 사이의 숫자들로 이루어진 범위를 생성
#range(start, end+1)로 하면 오류남 .. 시작점이 같은 것만 계산
answer = (len(sets[0]&sets[1] | sets[0]&sets[2] | sets[1]&sets[2])) #각 선분끼리의 교집합을 구하고 각각의 교집합의 합집합의 길이를 반환
return answer
Q.유한소수 판별하기
def solution(a, b):
''' 일부 테스트케이스 틀림.. 왜 ? ㅠ
answer = 0
if a%b==0 : #정수가 되는 경우
return 1
#최대공약수 찾기
x=max(a,b)
y=min(a,b)
while y!=0:
x,y=y,x%y
z=x #최대공약수
#분자와 분모의 최대공약수로 약분
a=a//z
b=b//z
#분모 약수 찾기
tmp=[]
for i in range(2,b+1):
if b%i==0 :
tmp.append(i)
print(tmp)
if (2 in tmp) or (5 in tmp) :
if (2 in tmp):
tmp.remove(2)
if (5 in tmp) :
tmp.remove(5)
if len(tmp)>0 :
return 2
else :
return 1
#elif (2 in tmp) and (5 in tmp) :
# while
else :
return 2
'''
answer = 0
#기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다.
#정수도 유한소수로 분류
if a==b % a%b==0:
return 1
x=max(a,b)
y=min(a,b)
while y!=0 :
x,y=y,x%y
a=a//x #x = 최대공약수
b=b//x
for i in range(b//2) :
if b%2==0 :
b=b//2
if b==1 :
break
elif b%5==0:
b=b//5
if b==1 :
break
answer = 1 if b==1 else 2
return answer
'''
from math import gcd
def solution(a, b):
b //= gcd(a,b) #gcd (num1, num2....) : num1,num2... 들의 최대 공약수를 출력함
while b%2==0:
b//=2
while b%5==0:
b//=5
return 1 if b==1 else 2
'''
'''
from math import gcd
def solution(a, b):
b = b / gcd(a, b)
for i in [2, 5]:
while not b % i:
b //= i
return 1 if b == 1 else 2
'''
DAY 23.배열, 정렬, 문자열
Q.특이한 정렬***
def solution(numlist, n):
answer=[]
answer=sorted(numlist,reverse=True)
answer=sorted(answer,key=lambda x: abs(n-x))
#key=lambda x: abs(n - x) 의 값에서 나온 결과값이 작은 순서대로 정렬되는 것임.
'''#?
answer = sorted(numlist,key = lambda x : (abs(x-n), n-x))
'''
'''
sorted: 리스트를 정렬하는 파이썬 내장 함수입니다.
numlist: 정렬할 리스트입니다.
key: 정렬 기준을 지정하는 옵션입니다. key에는 함수를 전달할 수 있으며, 이 함수의 반환값을 기준으로 리스트를 정렬합니다.
lambda x: (abs(x - n), n - x): 람다 함수를 사용하여 각 원소 x에 대한 정렬 키를 정의합니다. 이 람다 함수는 튜플을 반환합니다.
첫 번째 요소는 x와 n 사이의 차이의 절댓값인 abs(x - n)입니다.
두 번째 요소는 x와 n 사이의 차이인 n - x입니다.
따라서 리스트 numlist는 주어진 키에 따라 정렬되어 answer에 할당됩니다.
이 코드의 결과는 numlist의 원소들이 주어진 n 값과의 차이에 따라 정렬된 리스트가 됩니다.
'''
return answer
Q.등수 매기기#***
def solution(score):
answer = []
tmp=[]
for i in score :
tmp.append(sum(i)/len(i))
#print('tmp',tmp)
sort_tmp = sorted(tmp,reverse=True)
#print('sort_tmp',sort_tmp)
#tmmp=[]
for t in tmp :
#print('for: t ',t, ' sort_tmp.index(t)',sort_tmp.index(t))
answer.append(sort_tmp.index(t)+1)
''' #틀림 ㅠ
for i,j in score :
tmp.append((i+j)//2)
tmp.sort(reverse=True)
print('tmp',tmp)
for i,j in score :
#print(tmp.index((i+j)//2)+1,end=' ')
answer.append(tmp.index((i+j)//2)+1)
#index()는 리스트에서 특정 원소의 인덱스를 반환해주는 함수, 중복된 원소가 있으면 가장 작은 인덱스를 리턴
'''
return answer
Q.옹알이 (1)#***
def solution(babbling):
words=["aya", "ye", "woo", "ma"]
answer = 0
tmp=[]
for b in babbling :
for w in words :
b=b.replace(w," ") #지우고 남은 문자끼리 합쳐지지 않도록 일부러 공백을 둔다.
#print('b',b,'strip()',b.strip())
tmp.append(b)
if not b.strip():
#만약 b가 공백 문자열이라면 if b.strip():는 if ''가 되어 거짓(False)이 되고, b가 공백 문자열이 아니라면 if b.strip():는 if b가 되어 참(True)이 됩니다.
answer+=1 #i가 공백 문자열 또는 문자열 내에 공백만 있는 경우에 참이 되고, 그 외의 경우에는 거짓이 됩니다.
break
'''
'abcdefg'.strip('a') : 인자로 전달된 문자를 String의 왼쪽과 오른쪽에서 제거합니다.
'abcdefg'.lstrip('a') : 인자로 전달된 문자를 String의 왼쪽에서 제거합니다.
'abcdefg'.rstrip('a') : 인자로 전달된 문자를 String의 오른쪽에서 제거합니다.
인자가 없을 경우 공백 제거
'''
return answer
Q.로그인 성공?
def solution(id_pw, db):
answer = ''
for d in db :
if d==id_pw :
answer='login'
break
elif str(d[0])==str(id_pw[0]):
answer='wrong pw'
break #*
'''
본 조건에도 break가 필요하다.
login과 wrong pw, fail에 우선 순위가 있기 때문임. 아래 반례 예시
입력값 〉 ["abc04", "345"], [["abc04", "335"], ["abc03", "345"]]
기댓값 〉 "wrong pw"
'''
else :
answer='fail'
return answer
DAY 24.수학, 시뮬레이션, 문자열, 조건문, 반복문
Q.치킨 쿠폰#***
def solution(chicken):
answer = 0
coupon = chicken
while coupon >=10:
ch=coupon//10
answer+=ch
coupon=coupon%10
coupon+=ch
#print(answer,ch,coupon)
return answer
Q.이진수 더하기#***
def solution(bin1, bin2):
answer = ''
x=int(bin1,2) #int(bin1,2) : bin1 값을 2진수로 변환. 단, bin1 문자열을 받아 정수로 변환
y=int(bin2,2)
#print(bin(x + y))
answer = bin(x + y)[2:] #ex : 0b11000 처럼 0b가 붙어 나오므로 자름
#bin(x + y).replace("0b","")
'''
-int('x',8) 함수 : 8/16/2진수 만자열을 정수형(int) 숫자로 형변환 할 수 있다.
-oct() : 10진수>8진수 문자열
-hex() : 10진수>16진수 문자열
-bin() : 10진수 > 2진수 문자열
'''
return answer
Q.A로 B 만들기
def solution(before, after):
answer = 0
tmp=''
size=len(before)
for i in range(size) :
x=after[i]
if x in before :
idx=before.index(x)
tmp+=before[idx]
before = before[:idx]+before[idx+1:]
else :
break
if tmp==after :
answer = 1
return answer
'''
before=sorted(before)
after=sorted(after)
if before==after:
return 1
else:
return 0
'''
Q.k의 개수
def solution(i, j, k):
answer = 0
arrs=list(range(i,j+1))
for a in arrs :
if str(k) in str(a) :
answer+=(str(a).count(str(k)))
return answer
#answer = sum([ str(i).count(str(k)) for i in range(i,j+1)])
DAY 25.시뮬레이션, 조건문, 수학
Q.문자열 밀기#***
def solution(A, B):
answer = 0
cnt=0
for i in range(len(A)) :
if A == B :
break
else :
A=list(A)
A.insert(0,A.pop())
A=''.join(A)
cnt+=1
if A==B :
answer = cnt
else :
answer = -1
return answer
'''
from collections import deque
def solution(A, B):
a, b = deque(A), deque(B)
for cnt in range(0, len(A)):
if a == b:
return cnt
a.rotate(1)
return -1
'''
Q.종이 자르기 #***
def solution(M, N):
answer = 0
answer=(M*N)-1
'''
종이를 1번 자르면 2장
종이를 2번 자르면 3장
종이를 3번 자르면 4장
'''
return answer
Q.연속된 수의 합 #***
def solution(num, total):
answer = []
start=total
'''
9번 테스크 케이스만 안됨. 반례예시
#num=3,total=0,result=[-1,0,1] 일 경우를 위해
아래 if num>total 조건을 추가하였음
'''
if num>total :
start=total+num
while True :
arrs=list(range(start,start-num,-1))
if sum(arrs)==total:
answer=arrs
break
start-=1
'''
else :
arrs=list(range(start,start+num))
if sum(arrs)==total:
answer=arrs
break
start+=1
'''
answer=sorted(answer)
return answer
#return [(total - (num * (num - 1) // 2)) // num + i for i in range(num)]
'''댓글 해석 참조 펌
1. result를 일반화 시키면 [x+0, x+1, x+2, x+3 ... x + (num-1)]
2. 그리고 위 값을 전부 더한 값이 total이 됨. total = num*x + num*(num-1)//2 ※ result의 전체요소의 갯수는 num개 이므로 x의 갯수는 num개 이고 상수 부분은 첫번째 항이 0이고 마지막항이 num-1인 등차가 1인 등차수열의 합임.
3. 2번에서 도출한 공식을 이제 위 코드에 대입해보면 [(total - (num * (num - 1) // 2)) // num + i for i in range(num)] = [num*x + (num * (num - 1) // 2)) - (num * (num - 1) // 2)) // num + i for i in range(num)] = [num*x // num + i for i in range(num)] = [x + i for i in range(num)] 1번에서의 result x식과 일치하므로 정답이 됨.
'''
Q.다음에 올 숫자
def solution(common):
answer = 0
if abs(common[1]-common[0]) == abs(common[2]-common[1]) :
x=common[1]-common[0]
answer=common[-1]+x
elif (common[1]/common[0]) == common[2]/common[1] :
x=(common[1]/common[0])
answer=common[-1]*x
return answer
사용 문법 정리
-최대공약수 (약분>최대공약수 : 공통되는 약수 중에서 최대 값)
#for문으로 최대 공약수 찾기
for i in range(min(x,y),0,-1) : #뒤에서 부터
if x%i==0 and y%i==0 :
x=x//i
y=y//i
break
#유클리드 호제법으로 최대 공약수(GCD, Greatest Common Divisor)를 찾기
def euclidean_algorithm(a, b):
# 큰 수와 작은 수를 구분하여 대입
if a < b:
a, b = b, a
# b가 0이 될 때까지 반복
while b != 0:
# a를 b로 나눈 나머지를 a에 대입하고, b에는 이전의 a를 대입
a, b = b, a % b
# 최대 공약수인 a를 반환
return a
#유클리드 호제법2
def gcd(a, b):
while b > 0:
a, b = b, a % b
return a
#math 사용하여 최대 공약수 찾기
'''
from math import gcd
def solution(a, b):
b //= gcd(a,b) #gcd (num1, num2....) : num1,num2... 들의 최대 공약수를 출력함
while b%2==0:
b//=2
while b%5==0:
b//=5
return 1 if b==1 else 2
'''
'''
from math import gcd
def solution(a, b):
b = b / gcd(a, b)
for i in [2, 5]:
while not b % i:
b //= i
return 1 if b == 1 else 2
'''
-import math
gcd(): 최대공약수
lcm(): 최소공배수
-중앙값
x=sorted(array,reverse=True)
answer = x[len(x)//2]
sorted(array)[len(array) // 2]
-최빈값
while len(array)!=0 :
for i,x in enumerate(set(array)) :
array.remove(x)
if i==0 :
return x
return -1
-짧게
return [i*2 for i in numbers]
answer = [i for i in range(1,n+1) if i%2!=0]
return [i for i in range(1, n+1, 2)]
return sum([i for i in range(2, n + 1, 2)])
answer = sorted(numlist,key = lambda x : (abs(x-n), n-x))
-배열 뒤집기
for i in range (len(num_list)//2) :
num_list[i],num_list[len(num_list)-1-i] = num_list[len(num_list)-1-i], num_list[i]
num_list[::-1]
num_list.reverse()
while(num_list):
result.append(num_list.pop())
-문자열 뒤집기
for x in my_string :
answer=x+answer
return my_string[::-1]
return ''.join(list(reversed(my_string)))
for i in range(len(my_string)-1, -1, -1) :
answer += my_string[i]
-리스트>문자열
str = ''.join(list)
-딕셔너리 dictionary
dic = {"a": 1, "b": 2}
dic[key] : dic["a"] > 1 #단, key 값이 없는 경우 에러
dic.get(key) : dic.get("a") > 1 #key 값이 없는 경우 None
dict.get(key, default=None) : print(a.get("c", 0)) > 0 #key가 존재하지 않을 경우 default 값을 출력함
-조합 ; 경우의 수
서로 다른 n개 중 m개를 뽑는 경우의 수 공식
조합 nCm = (n-m)!*m! 분의 n!
n!
---------
(n-m)!*m!
import math
def solution(balls,share):
return math.comb(balls,share)
def fac(n):
ret=1
for i in range(1,n+1) :
ret*=i
return ret
answer = fac(balls)//((fac(balls-share))*fac(share))
-배열 회전
if direction=='right':
numbers.insert(0,numbers.pop())
elif direction=='left':
numbers.append(numbers.pop(0))
-팩토리얼
factorial = 1
while factorial <= n:
factorial = factorial * answer
-함수
isalpha() : x.isalpha() 알파벳 인지 ?
isdigit() : i.isdigit() 숫자인지 ?
-집합(set) 자료형
교집합 s1 & s2 : set(s1)&set(s2) 교집합 #set()의 & 연산자는 두 집합(sets) 간의 교집합을 반환
합집합 s1 | s2
차집합 s1 - s2
값 1개 추가하기 - add(): add(1)
값 여러 개 추가하기 - update() : s1.update([4, 5, 6])
특정 값 제거하기 - remove() : s1.remove(2)
-평행 ; 기울기
좌표에서 기울기가 같다면 평행
기울기 = y좌표의차이/x좌표의차이
-수
제곱수 x=n**(1/2) #제곱근 2분의 1승
기약분수 분모의 소인수가 2와 5만 존재해야 합니다.
-int()
int() : x=int(bin1,2) #bin1 값을 2진수로 변환. 단, bin1 문자열을 받아 정수로 변환
>>>> bin(x)[2:], bin(x).replace("0b","") #ex:0b11000 처럼 0b가 붙어 나오므로 자름
int('x',8) 함수 : 8/16/2진수 만자열을 정수형(int) 숫자로 형변환 할 수 있다.
oct() : 10진수>8진수 문자열
hex() : 10진수>16진수 문자열
bin() : 10진수 > 2진수 문자열
-문자열 밀기
from collections import deque
def solution(A, B):
a, b = deque(A), deque(B)
for cnt in range(0, len(A)):
if a == b:
return cnt
a.rotate(1)
return -1
-종이 자르기
answer=(M*N)-1
'''
종이를 1번 자르면 2장
종이를 2번 자르면 3장
종이를 3번 자르면 4장
'''
'PROGRAMMERS > Coding Test, Python' 카테고리의 다른 글
[프로그래머스/코딩테스트 고득점 Kit/Python] 힙(Heap) (0) | 2023.12.06 |
---|---|
[프로그래머스/코딩테스트 고득점 Kit/Python] 스택/큐 (0) | 2023.12.06 |
[프로그래머스/코딩테스트 고득점 Kit/Python] 해시 (0) | 2023.12.06 |
[프로그래머스/Lv.0/Python] 코딩테스트 기초문제 (0) | 2023.11.06 |
[프로그래머스/Lv.0/Python] 코딩테스트 기초문제
프로그래머스-코딩 기초 트레이닝
https://school.programmers.co.kr/learn/challenges/training?order=acceptance_desc
코딩 기초 트레이닝 캘린더
DAY1.출력
Q.문자열 출력하기
str = input()
print(str)
Q.a와 b 출력하기
a, b = map(int, input().strip().split(' '))
print('a =', a)
print('b =', b)
Q.문자열 반복해서 출력하기
a, b = input().strip().split(' ')
b = int(b)
for i in range(b) :
print(a, end='')
Q.대소문자 바꿔서 출력하기
str = input()
str2=''
for x in str :
if x.isupper() :
str2+=x.lower()
else:
str2+=x.upper()
print(str2)
'''
오답(에러)
주어진 코드에서 출력이 원하는 대로 나오지 않는 이유는
반복문 안에서 x 변수에 대한 변환 작업은 원본 문자열인 str에 적용되지 않기 때문입니다.
Python에서 문자열은 불변(immutable)하며, 문자열을 수정하려면 새로운 문자열을 생성해야 합니다.
'''
for i in range(len(str)) :
if str[i].isupper() :
str[i].lower()
print(str[i])
else :
str[i]=str[i].upper()
print(str)
Q.특수문자 출력하기
출력예시 : !@#$%^&*(\'"<>?:;
print('!@#$%^&*(\\\'"<>?:;')
Day 2.출력, 연산
Q.덧셈식 출력하기
a, b = map(int, input().strip().split(' '))
print(a,'+',b,'=',a+b)
Q. 문자열 붙여서 출력하기
str1, str2 = input().strip().split(' ')
print(str1+str2)
#print(str1, str2, sep='')
Q. 문자열 돌리기
str = input()
for x in str :
print(x)
Q. 홀짝 구분하기
a = int(input())
if a%2==0 :
print(a,'is even')
else :
print(a, 'is odd')
Q. 문자열 겹쳐쓰기
def solution(my_string, overwrite_string, s):
answer = ''
answer+=my_string[0:s]
answer+=overwrite_string
if len(answer)<len(my_string):
answer+=my_string[len(answer):]
# answer = my_string[:s]+overwrite_string+my_string[s+len(overwrite_string):]
return answer
Day 3.연산
Q.문자열 섞기
def solution(str1, str2):
answer = ''
for i in range(len(str1)):
answer+=str1[i]+str2[i]
return answer
Q.문자 리스트를 문자열로 변환하기
def solution(arr):
answer = ''
for x in arr:
answer+=x
return answer
Q.문자열 곱하기
def solution(my_string, k):
answer = ''
for i in range(k):
answer+=my_string
return answer
Q.더 크게 합치기
def solution(a, b):
answer = 0
x=int(str(a)+str(b))
y=int(str(b)+str(a))
if x>y or x==y:
answer=x
else :
answer=y
return answer
Q.두 수의 연산값 비교하기
def solution(a, b):
answer = 0
x=int(str(a)+str(b))
y=2*int(a)*(b)
if x>y or x==y :
answer=x
else :
answer=y
return answer
#return max(int(str(a) + str(b)), 2 * a * b)
#return int(str(a) + str(b)) if int(str(a) + str(b)) > 2*a*b else 2*a*b
Day 4.연산, 조건문
Q.n의 배수
def solution(num, n):
answer = 1 if num%n==0 else 0
return answer
Q.공배수
def solution(number, n, m):
#오답
#answer = 1 if number%(n*m)==0 else 0
answer = 1 if (number%n==0 and number%m==0) else 0
return answer
Q.홀짝에 따라 다른 값 반환하기
def solution(n):
answer = 0
if n%2==0 :
for i in range(2,n+1,2) :
answer+=i*i
else :
for i in range(1,n+1,2) :
answer+=i
return answer
Q.조건 문자열
def solution(ineq, eq, n, m):
answer = 0
#ㅎㅎ?
if ineq=='<':
if eq=='=' and n<=m :
answer = 1
if eq=='!' and n<m :
answer = 1
elif ineq=='>':
if eq=='=' and n>=m :
answer = 1
if eq=='!' and n>m :
answer = 1
return answer
Q.flag에 따라 다른 값 반환하기
def solution(a, b, flag):
answer = 0
answer = a+b if flag else a-b
return answer
DAY 5.조건문
Q.코드 처리하기
def solution(code):
ret = ''
mode=0
for i in range(len(code)) :
x=str(code[i])
if mode==0 :
if x!='1' and i%2==0 :
ret+=x
elif x=='1':
mode=1
else :
if x!='1' and i%2!=0 :
ret+=x
elif x=='1':
mode=0
#print(i, x, mode, ret, sep=' ')
ret= 'EMPTY' if ret=='' else ret
# return answer if answer else 'EMPTY'
return ret
Q.등차수열의 특정한 항만 더하기
def solution(a, d, included):
answer = 0
for i in range(len(included)) :
if included[i]==True :
answer+=a+(d*i)
return answer
Q.주사위 게임 2
def solution(a, b, c):
answer = 0
if a==b==c :
answer+=(a+b+c)*(a*a+b*b+c*c)*(a*a*a+b*b*b+c*c*c)
elif a==b or a==c or b==c :
answer+=(a+b+c)*(a*a+b*b+c*c)
else :
answer+=(a+b+c)
return answer
#answer *= a**(i+1)+b**(i+1)+c**(i+1)
Q.원소들의 곱과 합
def solution(num_list):
answer = 0
sum1=0
sum2=1
for x in num_list :
sum1+=x
sum2*=x
if sum1**2>sum2 :
answer = 1
elif sum1**2<sum2 :
answer = 0
return answer
#sum(num_list)
Q.이어 붙인 수
def solution(num_list):
answer = 0
a=''
b=''
for x in num_list :
if x%2==0 :
a+=str(x)
else :
b+=str(x)
answer = int(a) + int(b)
return answer
DAY 6.조건문, 반복문
Q.마지막 두 원소
def solution(num_list):
answer = []
size=len(num_list)
if num_list[size-1] > num_list[size-2] :
num_list.append(num_list[size-1]-num_list[size-2])
else :
num_list.append(num_list[size-1]*2)
answer=num_list
return answer
# a=num_list[-1]
# b=num_list[-2]
Q.수 조작하기 1
def solution(n, control):
for x in control :
if x=='w' :
n=n+1
elif x=='s':
n=n-1
elif x=='d':
n=n+10
elif x=='a':
n=n-10
return n
Q.수 조작하기 2
def solution(numLog):
answer = ''
for i in range(1,len(numLog)) :
tmp = numLog[i]-numLog[i-1]
if tmp==1 :
answer+='w'
elif tmp==-1:
answer+='s'
elif tmp==10:
answer+='d'
elif tmp==-10:
answer+='a'
return answer
Q.수열과 구간 쿼리 3
def solution(arr, queries):
for x in queries :
i,j=x[0],x[1]
arr[i],arr[j] = arr[j],arr[i]
return arr
#for a,b in queries:
# arr[a],arr[b]=arr[b],arr[a]
Q.수열과 구간 쿼리 2
def solution(arr, queries):
answer = []
for s,e,k in queries :
tmp=arr[s:e+1]
minValue = 2147000000
for x in tmp :
if x>k and minValue>x :
minValue = x
if minValue!=2147000000 :
answer.append(minValue)
else :
answer.append(-1)
return answer
#m=float('inf')
#min(tmp)
DAY 7.반복문
Q.수열과 구간 쿼리 4
def solution(arr, queries):
for s,e,k in queries :
#tmp = arr[s:e+1]
for i in range(s,e+1) :
if i%k==0 :
arr[i]=arr[i]+1
return arr
Q.배열 만들기 2
def solution(l, r):
answer = []
#*
for num in range(l,r+1):
if not set(str(num)) - set(['0','5']) :
answer.append(num)
'''
set(str(num))은 num을 문자열로 변환하고, 문자열을 중복되지 않는 집합(set)으로 변환합니다. 집합은 중복된 요소를 포함하지 않으므로, 각 문자가 한 번만 나타납니다.
set(['0', '5'])는 문자 '0'과 '5'로 이루어진 문자열 리스트를 집합으로 변환합니다.
그런 다음 set(str(num)) - set(['0', '5'])는 num을 문자열로 변환한 집합에서 '0'과 '5'로 이루어진 집합을 뺀 결과를 나타냅니다. 만약 num의 문자열 표현에 '0' 또는 '5'가 없다면, 이 연산 결과는 빈 집합이 됩니다.
'''
return answer if answer else [-1]
Q.카운트 업
def solution(start_num, end_num):
return list(range(start_num, end_num+1))
#return [i for i in range(start,end+1)]
Q.콜라츠 수열 만들기
def solution(n):
answer=[n]
while n>1 :
if n%2==0 :
n=n//2
else :
n=3*n+1
answer.append(n)
return answer
Q.배열 만들기 4
def solution(arr):
stk = []
i=0
while i < len(arr) :
if len(stk)==0 :
stk.append(arr[i])
i+=1
else :
if stk[-1] < arr[i] :
stk.append(arr[i])
i+=1
else :
stk.pop() #*
return stk
DAY 8.조건문,문자열
Q.간단한 논리 연산
def solution(x1, x2, x3, x4):
#논리합 OR ∨ , 논리곱 AND ∧ (True 1, False 0)
answer = True
a=(True if x1==True or x2==True else False)
b=(True if x3==True or x4==True else False)
answer = False if a==False or b==False else True
return answer
#return (x1 | x2) & (x3 | x4)
#return (x1 or x2) and (x3 or x4)
Q.주사위 게임 3
#런타임에러 ㅠ ㅠ
def solution(a, b, c, d):
answer = 0
x=set([a,b,c,d])
y=list([a,b,c,d])
if len(x)==1 :
answer=1111*a
elif len(x)==4 :
answer=min(x)
elif len(x)==3 :
ch=[0]*7
p=0
for i in y:
ch.insert(i,(ch[i]+1))
for i in ch:
if ch[i]>1 :
p=i
break
tmp=y
tmp.remove(p) #list.remove(value) 하나만 제거함
tmp.remove(p)
q=tmp[0]
r=tmp[1]
answer=q*r
elif len(x)==2 :
ch=list([0]*7)
for i in y:
ch[i]=ch[i]+1
#answer=int(str(ch[0])+str(ch[1])+str(ch[2])+str(ch[3])+str(ch[4])+str(ch[5])+str(ch[6]))
for i in range(len(ch)):
if ch[i]==3:
answer=333
tmp=y
p=i
tmp.remove(p)
tmp.remove(p)
tmp.remove(p)
q=tmp[0]
answer=(10*p+q)**2
break
if answer==0 :
tmp=list(x)
p=tmp[0]
q=tmp[1]
answer=(p+q)*abs(p-q)
return answer
#정답 코드 https://school.programmers.co.kr/questions/47795
def solution(a, b, c, d):
answer = 0
arr=[a,b,c,d]
counts=[arr.count(i) for i in arr] #각 숫자의 출현 횟수를 저장
if max(counts)==4 : #모두 같은 경우
answer=1111*a
elif max(counts)==3 : #pppq
p=arr[counts.index(3)]
q=arr[counts.index(1)]
answer=(10*p+q)**2
elif max(counts)==2: #ppqr or ppqq
if min(counts) == 2:
return (a + c) * abs(a - c) if a == b else (a + b) * abs(a - b) #?
else:
p = arr[counts.index(2)]
return (a * b * c * d) / p**2 #?
else : #모두 다른 경우
answer=min(arr)
return answer
Q.글자 이어 붙여 문자열 만들기
def solution(my_string, index_list):
answer = ''
for x in index_list :
answer+=my_string[x]
return answer
Q.9로 나눈 나머지
def solution(number):
return int(number)%9
Q.문자열 여러 번 뒤집기
def solution(my_string, queries):
for s,e in queries :
'''
for i in range(e-s+1//2) :
#my_string[s+i], my_string[e-i] = my_string[e-i],my_string[s+i] #오류남
'''
my_string = my_string[:s] + my_string[s:e+1][::-1] + my_string[e+1:]
#my_string[start:end+1][::-1]는 파이썬에서 문자열을 일부분 선택한 후 그 부분을 뒤집는 연산을 수행하는 코드
return my_string
DAY 9.문자열
Q.배열 만들기 5
def solution(intStrs, k, s, l):
answer = []
for x in (intStrs) :
x=int(x[s:s+l])
if x>k :
answer.append(x)
return answer
Q.부분 문자열 이어 붙여 문자열 만들기
def solution(my_strings, parts):
answer = ''
for i in range(len(my_strings)) :
str=my_strings[i]
s,e = parts[i]
answer+=str[s:e+1]
return answer
Q.문자열의 뒤의 n글자
def solution(my_string, n):
return my_string[len(my_string)-n:]
#return my_string[-n:]
Q.접미사 배열
def solution(my_string):
answer = []
size=len(my_string)
for i in range (size):
answer.append(my_string[i:])
answer.sort()
return answer
Q.접미사인지 확인하기
def solution(my_string, is_suffix):
answer = 0
for i in range(len(my_string)) :
if(my_string[i:] == is_suffix) :
answer=1
if answer==1:
break
else :
answer=0
return answer
#return int(my_string.endswith(is_suffix)) #endsWith()는 특정문자열로 어떤 string이 특정문자열로 끝나는지를 검사해서 그 값을 Boolean값으로 반환
#return int(my_string[-len(is_suffix):] == is_suffix)
DAY 10.문자열
Q.문자열의 앞의 n글자
def solution(my_string, n):
return my_string [:n]
Q.접두사인지 확인하기
def solution(my_string, is_prefix):
#answer = 1 if my_string.startswith(is_prefix) else 0
answer = 1 if my_string[:len(is_prefix)] == is_prefix else 0
return answer
Q.문자열 뒤집기
def solution(my_string, s, e):
return my_string[:s]+my_string[s:e+1:][::-1]+my_string[e+1:]
Q.세로 읽기
def solution(my_string, m, c):
return my_string[c-1::m]
Q.qr code
def solution(q, r, code):
answer = ''
for i in range(len(code)) :
if i%q == r :
answer+=code[i]
return answer
DAY 11.리스트(배열)
Q.문자 개수 세기
def solution(my_string):
answer = []
#아스키코드 변환 ord():문자>숫자/chr():숫자>문자
answer=[my_string.count(chr(i)) for i in range(ord('A'), ord('Z') + 1)] + [my_string.count(chr(i)) for i in range(ord('a'), ord('z') + 1)]
return answer
Q.배열 만들기 1
def solution(n, k):
answer = []
for i in range(1,n+1) :
if i%k==0 :
answer.append(i)
return answer
#return [i for i in range(k,n+1,k)]
#return [i for i in range(1, n+1) if i % k == 0]
Q.글자 지우기
def solution(my_string, indices):
answer=''
for i in range(len(my_string)) :
if i not in indices :
answer +=my_string[i]
return answer
Q.카운트 다운
def solution(start, end_num):
answer=[]
ret=start
while ret >= end_num :
answer.append(ret)
ret-=1
return answer
#return list(range(start,end-1,-1))
Q.가까운 1 찾기
def solution(arr, idx):
answer = 0
for i in range(len(arr)):
if i >= idx and arr[i] == 1 :
answer=i
break
else :
answer=-1
return answer
DAY 12.리스트(배열)
Q.리스트 자르기
def solution(n, slicer, num_list):
answer = []
a,b,c=slicer
if n==1 :
num_list=num_list[0:b+1]
elif n==2:
num_list=num_list[a:]
elif n==3:
num_list=num_list[a:b+1]
elif n==4:
num_list=num_list[a:b+1:c]
answer=num_list
return answer
Q.첫 번째로 나오는 음수
def solution(num_list):
answer = 0
for x in num_list :
if x<0 :
answer=num_list.index(x) #index(): x를 찾은 가장 첫 번째 인덱스
break
else :
answer=-1
return answer
Q.배열 만들기 3
def solution(arr, intervals):
answer = []
for s,e in intervals :
for i in arr[s:e+1] :
answer.append(i)
return answer
#for a,b in intervals: answer+=arr[a:b+1]
Q.2의 영역
def solution(arr):
answer = []
s=0
e=0
for i in range(len(arr)):
if arr[i] == 2 :
s=i
break
for j in range(len(arr)-1,-1,-1):
if arr[j] == 2:
e=j
break
if arr.count(2)==0 :
answer.append(-1)
else :
answer+=arr[s:e+1]
return answer
#if 2 not in arr:
# return [-1]
#return arr[arr.index(2) : len(arr) - arr[::-1].index(2)]
Q.배열 조각하기
def solution(arr, query):
answer = []
for i in range(len(query)) :
if i%2==0 :
arr=arr[:query[i]+1]
else :
arr=arr[query[i]:]
return arr
DAY 13.리스트(배열)
Q.n 번째 원소부터
def solution(num_list, n):
return num_list[n-1:]
Q.순서 바꾸기
def solution(num_list, n):
return num_list[n:]+num_list[:n]
Q.왼쪽 오른쪽
def solution(str_list):
answer = []
for i in str_list :
if i=="l" :
answer=str_list[:str_list.index("l")]
break
elif i=="r":
answer=str_list[str_list.index("r")+1:]
break
return answer
Q.n번째 원소까지
def solution(num_list, n):
return num_list[:n]
Q.n개 간격의 원소들
def solution(num_list, n):
return num_list[::n]
DAY 14.리스트(배열)
Q.홀수vs짝수
def solution(num_list):
answer = 0
sum1=0
sum2=0
for i in range(len(num_list)):
if i%2==0:
sum1+=num_list[i]
else :
sum2+=num_list[i]
answer=sum1 if sum1>=sum2 else sum2
return answer
#return max(sum(num_list[::2]), sum(num_list[1::2]))
Q.5명씩
def solution(names):
answer = []
for i in range(0,len(names),5):
answer.append(names[i])
return answer
#return names[::5]
Q.할 일 목록
def solution(todo_list, finished):
answer = []
for i in range(len(todo_list)) :
if not finished[i] :
answer.append(todo_list[i])
return answer
#return [work for idx, work in enumerate(todo_list) if not finished[idx]]
Q.n보다 커질 때까지 더하기
def solution(numbers, n):
answer = 0
i=0
while answer<=n:
answer+=numbers[i]
i+=1
return answer
Q.수열과 구간 쿼리1
def solution(arr, queries):
answer = []
'''
#테스트 케이스 하나만 정답 .. 나머지 케이스 모두 틀림
for i in range(len(arr)):
if i<len(queries):
s,e = queries[i]
if s<=i<=e :
for j in range (s,e+1) :
arr[j] +=1
'''
for i,q in enumerate(queries) :
s=q[0]
e=q[1]
#if s<=i<=e :
for k in range(s,e+1) :
arr[k]+=1
return arr
DAY 15.리스트(배열),문자열
Q.조건에 맞게 수열 변환하기 1
def solution(arr):
answer = []
for idx,x in enumerate(arr) :
if x>=50 and x%2==0 :
arr[idx]=x//2
elif x<50 and x%2!=0 :
arr[idx]=x*2
return arr
Q.조건에 맞게 수열 변환하기 2
def solution(arr):
'''
#* ㅠ
answer = 0
arr2=[]
arr2.append(arr.copy()) #arr2.append(arr) 안됨.
for x in range(len(arr)) :
tmp=[]
for i in range(len(arr)) :
x = arr[i]
if x>=50 and x%2==0 :
arr[i]=x//2
elif x<50 and x%2!=0 :
arr[i]=x*2+1
tmp.append(arr[i])
arr2.append(tmp)
for i in range(len(arr2)) :
if arr2[i] == arr2[i+1] :
answer = i
break
'''
idx = 0
pre = arr
while True :
tmp = []
for x in pre :
if x>=50 and x%2==0 :
tmp.append(x//2)
elif x<50 and x%2!=0 :
tmp.append(x*2+1)
else :
tmp.append(x)
if pre == tmp :
break
idx+=1
pre=tmp
answer = idx
return answer
Q.1로 만들기
def solution(num_list):
answer = 0
for x in num_list :
while x>1 :
if x%2==0 :
answer+=1
x=x//2
elif x%2!=0 :
answer+=1
x=(x-1)//2
return answer
Q.길이에 따른 연산
def solution(num_list):
answer = 0
if len(num_list)>=11 :
for i in num_list :
answer+=i
elif len(num_list)<=10 :
answer+=1
for i in num_list :
answer*=i
return answer
#return sum(num_list) if len(num_list)>=11 else prod(num_list)
Q.원하는 문자열 찾기
def solution(myString,pat):
answer = 0
myString=myString.upper()
pat=pat.upper()
#if(myString.startswith(pat)) : answer=1 ##?? 안되는건가 ?
'''
#정확성: 90.9 ㅠ
for i in range(len(myString)-len(pat)) :
if myString[i:i+len(pat)] == pat :
answer = 1
break
'''
if pat in myString :
answer=1
return answer
#return int(pat.lower() in myString.lower())
DAY 16.문자열
Q.대문자로 바꾸기
def solution(myString):
return myString.upper()
Q.소문자로 바꾸기
def solution(myString):
return myString.lower()
Q.배열에서 문자열 대소문자 변환하기
def solution(strArr):
for i in range(len(strArr)):
if i%2==0:
strArr[i]=strArr[i].lower()
else :
strArr[i]=strArr[i].upper()
return strArr
Q.A 강조하기
def solution(myString):
answer = ''
for x in myString :
if x=='a':
answer+=x.upper()
elif x!="A" and x.isupper() :
answer+=x.lower()
else :
answer+=x
return answer
#return myString.lower().replace('a', 'A')
Q.특정한 문자를 대문자로 바꾸기
def solution(my_string, alp):
answer = ''
'''
for x in my_string :
if x==alp :
answer+=x.upper()
else :
answer+=x
'''
answer = my_string.replace(alp,alp.upper())
return answer
DAY 17.문자열
Q.특정 문자열로 끝나는 가장 긴 부분 문자열 찾기
def solution(myString, pat):
answer = ''
''' # 틀림
for i in range (len(myString)-len(pat),0,-1):
if myString[i:i+len(pat)] == pat :
answer = myString[:i+1] #ㅠ 틀림 .
break
'''
#index(), find() <--> rindex(), rfind() : 뒤에서 부터
#find(찾을 문자열), find(찾을 문자열, 시작 위치), find(찾을 문자열, 시작 위치, 종료 위치)
#만약 없을 경우 find()에서는 -1을 리턴하는 반면, index()에서는 ValueError가 발생
answer = myString[:myString.rfind(pat)+len(pat)]
return answer
Q.문자열이 몇 번 등장하는지
def solution(myString, pat):
answer = 0
for i in range(len(myString)-len(pat)+1) :
if myString[i:i+len(pat)] == pat :
answer+=1
return answer
Q.ad 제거하기
def solution(strArr):
answer = []
''' 틀림 ㅠ
for x in strArr :
if x.find("ad")>0 :
strArr.remove(x)
'''
for x in strArr :
if x.find("ad")<0 :
answer.append(x)
return strArr
#return [word for word in strArr if 'ad' not in word]
Q.공백으로 구분하기 1
def solution(my_string):
answer=list(my_string.split())
return answer
#return my_string.split()
Q.공백으로 구분하기 2
def solution(my_string):
return my_string.split()
DAY 18.문자열
Q.x 사이의 개수
def solution(myString):
answer = []
for x in myString.split('x') :
answer.append(len(x))
return answer
#return [len(w) for w in myString.split('x')]
Q.문자열 잘라서 정렬하기
def solution(myString):
answer = []
tmp=myString.split('x')
for i in tmp :
if i!="" :
answer.append(i)
answer.sort()
return answer
#return sorted(ch for ch in myString.split('x') if ch)
'''
myString.split('x'): 문자열 myString을 'x'를 구분자로 사용하여 분할한 후 각 부분을 리스트로 반환합니다. 예를 들어, "ABCxDEFxGHI"를 "x"로 분할하면 ['ABC', 'DEF', 'GHI']가 됩니다.
for ch in myString.split('x') if ch: 리스트 컴프리헨션을 사용하여 분할된 문자열 중 빈 문자열("")을 필터링하여 제거합니다. 이 부분은 if ch 조건을 사용하여 빈 문자열이 아닌 경우에만 포함합니다.
sorted(): 리스트를 정렬합니다. 위 코드에서는 문자열이 사전순으로 정렬됩니다.
'''
Q.간단한 식 계산하기
def solution(binomial):
answer = 0
a,op,b = binomial.split()
if op=='+' :
answer=int(a)+int(b)
elif op=='-':
answer=int(a)-int(b)
elif op=='*':
answer=int(a)*int(b)
return answer
#return eval(binomial)
#expression (=식)을 문자열로 받아서, 실행하는 함수
Q.문자열 바꿔서 찾기
def solution(myString, pat):
answer = 0
tmp = ""
for ch in myString :
if ch=="B" :
tmp+="A"
else :
tmp+="B"
answer = 1 if tmp.find(pat)>=0 else 0
return answer
Q.rny_string
def solution(rny_string):
answer = ''
for i in range(len(rny_string)) :
if rny_string[i]=='m' :
answer+='rn'
else :
answer+=rny_string[i]
return answer
#return rny_string.replace('m', 'rn')
DAY 19.문자열,리스트(배열)
Q.세 개의 구분자
def solution(myStr):
answer = []
x1=[]
for x in myStr.split('a') :
tmp = list(ch for ch in x.split('b') if ch)
x1+=tmp
x2=[]
for x in x1 :
tmp = list(ch for ch in x.split('c') if ch)
x2+=tmp
answer = x2 if len(x2)>0 else ["EMPTY"]
return answer
Q.배열의 원소만큼 추가하기
def solution(arr):
answer = []
for i in arr :
for x in range (i) :
answer.append(i)
return answer
Q.반 배열에 추가, 삭제하기
def solution(arr, flag):
answer = []
for i in range(len(arr)) :
if flag[i] :
for j in range (arr[i]*2) :
answer.append(arr[i])
else :
for j in range (arr[i]) :
answer.pop()
return answer
Q.배열 만들기 6
def solution(arr):
stk = []
for i in range(len(arr)) :
x=arr[i]
if len(stk)==0 :
stk.append(x)
elif stk[len(stk)-1]==x :
stk.pop()
elif stk[len(stk)-1]!=x :
stk.append(x)
if len(stk)==0 :
stk.append(-1)
return stk
#elif stk[-1] == arr[i]:
Q.무작위로 K개의 수 뽑기
def solution(arr, k):
answer = []
idx=0
while idx<len(arr) :
if arr[idx] not in answer :
answer.append(arr[idx])
if len(answer)==k :
break
idx+=1
if len(answer)<k :
while len(answer)<k:
answer.append(-1)
return answer
DAY 20.함수(메서드)
Q.배열의 길이를 2의 거듭제곱으로 만들기
def solution(arr): #ㅠ
answer = []
i=1
while i<len(arr):
i=i*2
for j in range(i-len(arr)) :
arr.append(0)
return arr
'''
a = 1
b = len(arr)
while a < b :
a *= 2
return arr + [0] * (a-b)
'''
Q.배열 비교하기
def solution(arr1, arr2):
answer = 0
if len(arr1)==len(arr2) :
sum1=0
sum2=0
for i in range (len(arr1)) :
sum1+=arr1[i]
sum2+=arr2[i]
if sum1==sum2 :
answer = 0
else :
answer = 1 if sum1>sum2 else -1
else :
answer = 1 if len(arr1)>len(arr2) else -1
return answer
#sum(arr1), sum(arr2)
Q.문자열 묶기
def solution(strArr):
arr=[0]*(len(strArr)+1)
for x in strArr :
arr[len(x)]+=1
return max(arr)
'''
a=[0]*31
for x in strArr: a[len(x)]+=1
return max(a)
'''
Q.배열의 길이에 따라 다른 연산하기
def solution(arr, n):
if len(arr)%2==0 :
for i in range (1,len(arr),2) :
arr[i]+=n
else :
for i in range(0,len(arr),2) :
arr[i]+=n
return arr
Q.뒤에서 5등까지
def solution(num_list):
answer = []
for i in range(5):
x=min(num_list)
answer.append(x)
num_list.remove(x)
return answer
#return sorted(num_list)[:5]
DAY 21.함수(메서드)
Q.뒤에서 5등 위로
def solution(num_list):
answer = []
#list.sort() 본 리스트를 정렬해서 반환
#sorted(리스트) 는 본 리스트를 기반하여 정렬한 새로운 리스트를 반환
return sorted(num_list)[5:]
Q.전국 대회 선발 고사
def solution(rank, attendance):
answer = 0
rank2=[]
for i in range(len(rank)) :
if attendance[i]==True :
rank2.append(rank[i])
a,b,c = sorted(rank2)[:3]
answer = 10000*rank.index(a) + 100*rank.index(b) + rank.index(c)
return answer
Q.정수 부분
def solution(flo):
return int(flo)
##flo//1
Q.문자열 정수의 합
def solution(num_str):
answer = 0
for x in num_str :
answer +=int(x)
return answer
Q.문자열을 정수로 변환하기
def solution(n_str):
return int(n_str)
DAY 22.함수(메서드), 조건문 활용
Q.0 떼기
def solution(n_str):
answer = ''
while True :
if n_str[0]=='0' :
n_str=n_str[1:]
else :
break
return n_str
#return n_str.lstrip('0')
#return str(int(n_str))
'''
'abcdefg'.strip('a') : 인자로 전달된 문자를 String의 왼쪽과 오른쪽에서 제거합니다.
'abcdefg'.lstrip('a') : 인자로 전달된 문자를 String의 왼쪽에서 제거합니다.
'abcdefg'.rstrip('a') : 인자로 전달된 문자를 String의 오른쪽에서 제거합니다.
인자가 없을 경우 공백 제거
'''
Q.두 수의 합
def solution(a, b):
return str(int(a)+int(b))
Q.문자열로 변환
def solution(n):
return str(n)
Q.배열의 원소 삭제하기
def solution(arr, delete_list):
for x in delete_list :
if x in arr :
arr.remove(x)
return arr
Q.부분 문자열인지 확인하기
def solution(my_string, target):
answer = 0 if my_string.find(target)<0 else 1
return answer
DAY 23.조건문 활용
Q.부분 문자열
def solution(str1, str2):
return 0 if str2.find(str1)<0 else 1
#return int(str1 in str2)
Q.꼬리 문자열
def solution(str_list, ex):
answer = ''
for x in str_list :
if ex not in x :
answer +=x
return answer
Q.정수 찾기
def solution(num_list, n):
return 1 if n in num_list else 0
#return int(n in num_list)
Q.주사위 게임 1
def solution(a, b):
answer = 0
if a%2!=0 and b%2!=0 :
answer = a**2 + b**2
elif a%2==0 and b%2==0 :
answer = abs(a-b) #abs():절댓값 함수
else :
answer = 2*(a+b)
return answer
Q.날짜 비교하기
def solution(date1, date2):
answer = -1
for i in range (3) :
if date1[i]<date2[i] :
answer=1
break
elif date1[i]>date2[i]:
answer=0
break
if answer==-1 :
answer=0
return answer
DAY 24.조건문 활용, 반복문 활용, 이차원 리스트(배열)
Q.커피 심부름
def solution(order):
answer = 0
for x in order :
if x=="iceamericano" or x=="americanoice"or x=="hotamericano" or x=="americanohot" or x=="americano" or x=="anything":
answer+=4500
elif x=="icecafelatte" or x=="cafelatteice" or x=="hotcafelatte" or x=="cafelattehot" or x=="cafelatte" :
answer+=5000
return answer
#if 'latte' in want:
Q.그림 확대
def solution(picture, k):
answer = []
for x in picture :
tmp=''
for i in x :
tmp+=i*k
for j in range(k) :
answer.append(tmp)
return answer
Q.조건에 맞게 수열 변환하기 3
def solution(arr, k):
if k%2==0:
for i,x in enumerate(arr) :
arr[i]=arr[i]+k
else :
for i,x in enumerate(arr) :
arr[i]=arr[i]*k
return arr
#return [i*k if k%2!=0 else i+k for i in arr]
Q.l로 만들기
def solution(myString):
answer = ''
#아스키코드 변환 함수
#ord():문자>숫자, chr():숫자>문자
for x in myString :
if ord(x)<ord('l'):
#if i < "l":
answer+='l'
else :
answer +=x
return answer
Q.특별한 이차원 배열 1
def solution(n):
answer=[]
for i in range (n) :
tmp=[]
for j in range(n) :
if i==j :
tmp.append(1)
else :
tmp.append(0)
answer.append(tmp)
return answer
'''
answer=[[0]*n for i in range(n)]
for i in range(n): answer[i][i]=1
'''
DAY 25.이차원 리스트(배열)
Q.정수를 나선형으로 배치하기
#**
def solution(n):
answer=[[0]*n for _ in range(n)]
#시계방향 : 우,하,좌,상
dx=[0,1,0,-1]
dy=[1,0,-1,0]
x,y=0,0
answer[x][y]=1
k=2
while k<=n*n :
for i in range(4):
while True :
nx=x+dx[i]
ny=y+dy[i]
if nx>=n or ny>=n or nx<0 or ny<0 or answer[nx][ny]!=0:
break
answer[nx][ny]=k
x=nx
y=ny
k+=1
return answer
Q.특별한 이차원 배열 2
def solution(arr):
answer = 1
for i in range(len(arr)) :
for j in range(len(arr)) :
if arr[i][j] != arr[j][i] :
answer = 0
return answer
Q.정사각형으로 만들기
def solution(arr):
#x=len(arr) #행의 수
#y=len(arr[0]) #열의 수
if len(arr) > len(arr[0]) : #행의 수가 더 많을 경우
for i in range(len(arr)) :
for j in range(len(arr)-(len(arr[i]))) :
arr[i].append(0)
elif len(arr) < len(arr[0]) : #열의 수가 더 많을 경우
for i in range(len(arr[0])-len(arr)):
arr.append([0]*len(arr[i]))
return arr
Q.이차원 배열 다각선 순회하기
def solution(board, k):
answer = 0
for i in range(len(board)) :
for j in range(len(board[0])) :
if i+j<=k :
answer +=board[i][j]
return answer
사용 문법 정리
-입출력
str = input()
a = int(input())
a, b = map(int, input().strip().split(' '))
-
길이 len(str)
min(counts)
max(counts)
sum(counts)
-print
print(a,'+',b,'=',a+b)
print(str1, str2, sep='')
print(a, end='')
-대소문자 변환
x.isupper()
x.islower()
x.lower()
x.upper()
-공백 제거
strip()
-반복문 for문
for i in range(len(str)) :
if str[i].isupper() :
for x in str :
print(x)
for i in range(0,len(names),5):
answer.append(names[i])
while answer<=n:
answer+=numbers[i]
i+=1
for i,q in enumerate(queries) :
s=q[0]
e=q[1]
for idx,x in enumerate(arr) :
if x>=50 and x%2==0 :
arr[idx]=x//2
-조건문 if문
if ineq=='<':
answer=1
elif ineq=='>':
answer=1
return answer
if 2 not in arr: #arr에 2가 없다면
return -1
if not finished[i] :
answer.append(todo_list[i])
if 'latte' in want:
-return
answer = a+b if flag else a-b
- 변환
x=int(str(a)+str(b))
x=str(code[i])
-연산
짝수even a%2==0
홀수odd a%2==1
배수 num%n==0
공배수 number%n==0 and number%m==0 #number가 n의 배수이면서 m의 배수
-숫자
나머지 n%i==0
몫(소숫값) n=n/2
몫(정수) n=n//2
거듭제곱 n**2
정수화 int(a)
정수화 a=a//1
- 최대/최솟값
minValue = 2147000000
m=float('inf')
-리스트[]
answer=[]
answer=list()
answer.append(1)
answer.pop()
answer.pop(4)
answer.remove(x) #하나만 제거함
-set : 중복되지 않는 집합(set)
answer=set()
차집합 set(str(num)) - set(['0','5'])
-짧게
return [i for i in range(start,end+1)]
return [i for i in range(k,n+1,k)]
return [i for i in range(1, n+1) if i % k == 0]
return list(range(start,end-1,-1))
return [work for idx, work in enumerate(todo_list) if not finished[idx]]
return sum(num_list) if len(num_list)>=11 else prod(num_list)
return [word for word in strArr if 'ad' not in word]
return sorted(ch for ch in myString.split('x') if ch)
return sorted(num_list)[:5]
return [i*k if k%2!=0 else i+k for i in arr]
-논리연산
#논리합 OR ∨ , 논리곱 AND ∧ (True 1, False 0)
a=(True if x1==True or x2==True else False)
b=(True if x3==True or x4==True else False)
#return (x1 | x2) & (x3 | x4)
#return (x1 or x2) and (x3 or x4)
-정렬
-sort()/sorted()
sort() : answer.sort(), list.sort(reverse=True)
리스트 원본값을 직접 수정함
sorted() : ret=sorted(list), ret=sorted(list,reverse=True)
리스트 원본 값은 그대로이고 정렬 값을 반환함
-함수
count() : counts=[arr.count(i) for i in arr] #각 숫자의 출현 횟수를 저장
copy() : arr2.append(arr.copy()) #arr2.append(arr) 안됨.
abs() : 절댓값
-find( )/index() <--> rindex(), rfind() : 뒤에서 부터
find() : x.find("ad")
#find(찾을 문자열), find(찾을 문자열, 시작 위치), find(찾을 문자열, 시작 위치, 종료 위치)
찾는 문자가 없는 경우에 -1을 출력
문자열만 사용이 가능
index() : num_list.index(x) x를 찾은 가장 첫 번째 인덱스
찾는 문자가 없는 경우에 ValueError 에러가 발생
문자열, 리스트, 튜플 자료형에서 사용 가능하고 딕셔너리 자료형에는 사용 불가
myString.rfind(pat)
-문자열 관련
endsWith(),startswith(): my_string.endswith('abc')
endsWith() 는 특정문자열로 어떤 string이 특정문자열로 끝나는지를 검사해서 그 값을 Boolean값으로 반환
replace() : replace('a', 'A') , my_string.replace(alp,alp.upper())
split() : myString.split(), myString.split(''), myString.split('x')
strip()
인자가 없을 경우 공백 제거
'abcdefg'.strip('a') : 인자로 전달된 문자를 String의 왼쪽과 오른쪽에서 제거합니다.
'abcdefg'.lstrip('a') : 인자로 전달된 문자를 String의 왼쪽에서 제거합니다.
'abcdefg'.rstrip('a') : 인자로 전달된 문자를 String의 오른쪽에서 제거합니다.
-아스키코드 변환
ord() : ord('A') 문자>숫자
chr() : chr(65) 숫자>문자
-슬라이싱
my_string[len(my_string)-n:]
my_string[-n:]
num_list[::n] #n의 간격
- from math import prod
prod() : num_list 원소값을 모두 곱한 값을 리턴
return sum(num_list) if len(num_list)>=11 else prod(num_list)
-2차원 배열
answer=[[0]*n for i in range(n)]
answer=[[0]*n for _ in range(n)]
for s,e in intervals :
for a,b in intervals: answer+=arr[a:b+1]
return [work for idx, work in enumerate(todo_list) if not finished[idx]]
for i,q in enumerate(queries) :
-2차원 배열 방향
answer=[[0]*n for _ in range(n)]
#ex 시계방향 : 우,하,좌,상
dx=[0,1,0,-1]
dy=[1,0,-1,0]
-변수 바꾸기
a,b = b,a
arr[i],arr[j] = arr[j],arr[i]
'PROGRAMMERS > Coding Test, Python' 카테고리의 다른 글
[프로그래머스/코딩테스트 고득점 Kit/Python] 힙(Heap) (0) | 2023.12.06 |
---|---|
[프로그래머스/코딩테스트 고득점 Kit/Python] 스택/큐 (0) | 2023.12.06 |
[프로그래머스/코딩테스트 고득점 Kit/Python] 해시 (0) | 2023.12.06 |
[프로그래머스/Lv.0/Python] 코딩테스트 입문문제 (0) | 2023.11.14 |
11. 응용 SW 기초 기술 활용
CH1. 운영체제 특징
운영체제(OS;Operating System)
사용자가 컴퓨터의 하드웨어를 쉽게 사용할 수 있도록 인터페이스를 제공해주는 소프투웨어
크게 인터페이스(쉘) + 커널의 구조 이다.
쉘은 운영체제의 가장 바깥 부분에 의치해서 사용자 명령에 대한 처리를 담당하는 역할,
커널은 하드웨어와 관련된 내부적인 역할을 담당함
운영체제 종류
윈도즈 Windows
유닉스 Unix - 리눅스 Linux / 맥 Mac / 안드로이드 Android
윈도즈(Windows) 운영체제 : MS-DOS의 멀티태스킹 기능과 GUI 환경을 제공하는 마이크로소프트사가 개발한 운영체제
윈도즈(Windows) 운영체제 특징 [지선자오]
그래픽 사용자 인터페이스(GUI) 제공 | 키보드 없이 마우스로 아이콘이나 메뉴를 선택하여 작업을 수행하는 그래픽 기반의 인터페이스 방식 |
선점형 멀티태스킹 방식 제공 | 동시에 여러 개의 프로그램을 실행하면서 운영체제가 각 작업의 CPU이용시간을 제어 |
자동감지 기능 제공 | 하드웨어를 설치했을 때 필요한 시스템 환경을 운영체제가 자동으로 구성해주는 자동감지 기능 제공 : Plug and Play |
OLE (Object Linking and Embedding) 사용 | 개체를 현재 작성 중인 문서에 자유롭게 연결 또는 삽입하여 편집할 수 있게 하는 기능 제공 |
유닉스(Unix) 계열 운영체제 : 데니스 리치와 켐 톰슨 등이 함께 벨 연구소를 통해 만든 운영체제, 90%이상 C언어로 구현되어 있는 운영체제로 범용 다중 사용자 방식의 시분할 운영체제
유닉스(Unix) 계열 운영체제 특징 [대다사이계]
대화식 운영체제 기능 제공 | 프롬프트가 나타난 상태에서 사용자가 명령을 입력하면 시스템은 그 명령을 수행하는 사용자 명령 기반의 대화식 운영체제 기능을 제공 |
다중 작업 기능 제공 | 다수의 작업(프로세스)이 중앙처리장치(CPU)와 같은 공용자원을 나누어 사용하여 한 번에 하나 이상의 작업을 수행하는 기능 제공 |
다중 사용자 기능 제공 | 여러 대의 단말(키보드와 모니터)이 하나의 컴퓨터와 연결되어서, 여러 사람이 동시에 시스템을 사용하여 각각의 작업을 수행할 수 있는 기능 제공 |
이식성 제공 | 90% 이상 c언어로 구현되어 있고, 시스템 프로그램이 모듈화되어 있어서 다른 하드웨어 기종으로 쉽게 이식 가능 |
계층적 트리 구조 파일 시스템 제공 | 유닉스는 계층적 트리 구조를 가짐으로써 통합적인 파일 관리가 용이 |
리눅스(Linux) 운영체제 : 유닉스를 기반으로 개발되고, 오픈 소스 기반의 운영체제
맥(Mac) 운영체제 : 애플이 유닉스를 기반으로 개발한 그래픽 사용자 인터페이스 기반의 운영체제
안드로이드(Android) 운영체제 : 휴대 전화를 비롯한 휴대용 장치를 위한 운영체제와 미들웨어, 사용자 인터페이스 그리고 표준 응용 프로그램(웹 브라우저, 이메일 클라이언트 등)을 포함하고 있는 운영체제
안드로이드(Android) 운영체제 특징
리눅스 기반 | 안드로이드는 리눅스 커널 위에서 동작 |
자바와 코틀린 언어 | 고수준 언어를 사용해 응용 프로그램을 작성 생산성이 높으며 전문 지식이 없어도 개발 가능 |
런타임 라이브러리 | 컴파일된 바이트 코드 구동 가능 |
안드로이드 소프트웨어 개발 키트(SDK) | 응용 프로그램을 개발하는 데 필요한 각종 도구와 API를 제공 |
운영체제 제어 방법
- CLI : Command Line Interface. 사용자가 직접 명령어를 입력, 컴퓨터에 명령을 내리는 방식
- GUI : Graphic User Interface. 마우스로 화면을 클릭하여 그래픽 위주로 컴퓨터를 제어하는 방식
윈도즈 운영체제의 기본 명령어
- CD : 현재 딜게터리 이름을 보여주거나 바꿈
- CLS : 화면을 지움
- CMD : Windows 명령 프롬프트 창을 열어줌
리눅스/유닉스 운영체제의 기본 명령어
파일처리
- ls : 자신이 속해있는 폴더 내에서의 파일 및 폴더들을 표시
- pwd : print working directory. 현재 작업 중인 디렉토리의 절대 경로를 출력
- rm : 파일 삭제
- cp : 파일 복사
- mv : 파일 이동
리눅스/유닉스 운영체제의 파일 접근 권한 관리
각 파일의 정보가 저장된 i-node값을 읽음
i-node : 유닉스 계통 파일 시스템에서 사용하는 자료구조
- chmod : 특정 파일 또는 디렉토리의 퍼미션 수정 명령어
- chown : 파일이나 디렉토리의 소유자, 소유 그룹 수정 명령어
r(reald) : 4 , w(write) : 2, eXcute : 1
운영체제 핵심 기능
메모리 관리 | 프로그램이 실행이 종료될 때 까지 메모리를 가용한 상태로 유지 및 관리하는 기능 메모리에 있는 프로그램은 CPU로 이동하여 처리 (CPU는 가상 주소를, 메모리는 물리주소를 사용하는데 MMU가 주소를 매핑하는 역할 수행) - MMU(Memory Management Unit) : CPU가 메모리에 접근하는 것을 관리하는 컴퓨터 하드웨어 부품으로 가상 메모리 주소로 변환하는 장치 |
프로세스 관리 | 프로세스 관리 기법에는 '일시 중지 및 재실행', '동기화', '통신', '교착상태 처리', '프로세스 생성 삭제' 가 있음 - 프로세스(Process) : 일반적으로 CPU에 의해 처리되는 프로그램으로 현재 실행중인 프로그램 |
메모리 관리 기법 [반배할교]
반입 기법 | 메모리로 적재 시기 결정 (When) | |
배치 기법 | 메모리 적재 위치 결정 (Where) | 최초 적합 (First-fit) 최적 적합 (Besg-fit) 최악 적합(Worst-fit) |
할당 기법 | 메모리 적재 방법 결정 (How) | |
교체 기법 | 메모리 교체 대상 결정 (Who) |
메모리 배치 기법
- 최초 적합 (First-fit) : 프로세스가 적재될 수 있는 가용공간 중에서 첫 번째 분할에 할당하는 방식
- 최적 적합 (Best-fit) : 가장 크기가 비슷한 공간을 선택하여 프로세스를 적재하는 방식 (공백 최소화 장점)
- 최악 적합 (Worst-fit) : 프로세스 가용 공간들 중에서 가장 큰 공간에 할당하는 방식
프로세스 관리
(사진)
프로세스 상태 [생준실대완]
생성(Create) 상태
준비(Ready) 상태
실행(Running) 상태
대기 (Wating) 상태
완료(Complete) 상태
프로세스 상태 전이
디스패치(Dispatch) : 문맥교환 발생
타이머 런 아웃(Timer run out) = 할당 시간 초과
블록(Block) = 입출력 발생
웨이크 업 (Wake-up) = 깨움
* 문맥교환(Context switching ) : CPU가 현재 실행하고 이쓴 프로세스의 문맥 상태를 프로세스 제어블록(PCB)에 저장하고 다음 프로세스의 PCB로 부터 문백을 복원하는 작업을 문맥교환 이라고 함
프로세스 스케즐링
프로세스 스케줄링 주요 용어
서비스 시간 | 프로세스가 결과를 산출하기까지 소요되는 시간 |
응답시간(Response Time) | 프로세스들이 입력되어 서비스를 요청하고, 반응하기 시작할 때까지 소요되는 시간 |
반환시간(Turnaround Time) | 프로세스 들이 입력되어 수행하고 결과를 산출하기까지 소요되는 시간 반환시간 = 대기시간 + 수행시간 |
대기시간 | 프로세스가 프로세서에 할당 대기까지 큐에 대기하는 시간 |
평균 대기시간 | |
종료시간 | |
시간 할당량(Time Quantum 또는 Time Slice) | |
응답률 | (대기시간+서비스 시간) / 서비스 시간 HRN(Highest Response ratio Naxt) 스케줄링에서 사용 HRN 스케줄에서 응답률이 높으면 우선순위가 높다고 판단 |
프로세스 스케줄링 유형
선점형 스케줄링 Preemptive Scheduliung |
비선점형 스케줄링 Non Preemptive Scheduling |
|
개념 | 하나의 프로세스가 CPU를 차지하고 있을때, 우선순위가 높은 다른 프로세스가 현재 프로세스를 중단시키고 CPU를 점유하는 스케줄링 방식 | 한 프로세스가 CPU를 할당받으면 작업 종료 후 CPU 반환 시까지 다른 프로세스는 CPU 점유가 불가능한 스케즐링 방식 |
알고리즘 | -라운드로 로빈 (Round Robin) -SRT(Shortest Remainig Time First) -다단계 큐 (MLQ; Multi-Level Queue) -다단계 피드백 큐 (MLFQ; Multi-Level Feedback Queue) |
-우선순위 (Priority) -기한부 (Deadline) - FCFS - HRN (High Response Ratio Next) - SJF (Shortest Job First) |
프로세스 스케줄링 알고릐즘 유형 [SMMR]
라운드 로빈 (Round Robin) | 균등한 CPU 점유시간 시분할 시스템을 사용 |
SRT(Shortest Remainig Time First) | 짧은 수행시간 프로세스 우선 수행 |
다단계 큐 (MLQ; Multi-Level Queue) | 독립된 스케줄링 큐 |
다단계 피드백 큐 (MLFQ; Multi-Level Feedback Queue) | 큐마다 다른 시간 할당량 마지막단계는 라운드 로빈 방식 처리 |
비선점형 스케줄링 알고리즘 유형 [우기HFS]
우선순위 (Priority) | 주요/긴급 프로세스에 대한 우선 처리 |
기한부 (Deadline) | 요청에 명시된 시간 내 처리를 보장 |
FCFS (First Come First Service) | 도착한 순서대로 처리 |
SJF (Shortest Job First) | 도착하는 시점에 따라 그 당시 가장 작은 서비스 시간을 갖는 프로세스가 종료시까지 자원 점유 기아 현생 발생 가능성 |
HRN (High Response Ratio Next) | 대기 중인 프로세스 중 현재 응답률 (Response Ratio)이 가장 높은것을 선택 기아 현상 (stavation) 최소화 기법 HRN 우선순위 = (대기시간 + 서비스 시간 ) / 서비스 시간 |
*기하(Starvation) 현상 : 시스템 부하가 많아서 준비 큐에 있는 낮은 등급의 프로세스가 무한정 기다리는 현상. > 해결하기 위해 오랫동안 기다린 프로세스에게 우선순위를 높여주도록 처리하는 기법인 *에이징(Aging) 을 활용한다.
반환시간 및 대기시간 계산 방법 [반종도 대반서]
반환 시간 = 종료 시간 - 도착 시간
대기 시간 = 반환 시간 - 서비스 시간
교착 상태 (DeadLock)
다중프로세싱 환경에서 두 개 이상의 프로세스가 특정 자원할당을 무한정 대기하는 상태
교착상태 발생 조건 [상점비환]
- 상호 배제 (Mutual Exclusive)
- 점유와 대기 (Hold & Wait)
- 비선점(Non Preemption)
- 환형 대기 (Circular Wait)
교착상태 해결 방법 [예회발복]
- 예방 (Prevention)
- 회피 (Avoidance)
- 발견 (Detection)
- 복구 (Recovery)
가상화 (Virtualization)
물리적인 리소스들을 사용자에게 하나로 보이게 하거나, 하나의 물리적인 리소스를 여러개로 보이게 하는 기술
가상화의 종류
플랫폼의 가상화 | 하드웨어 플랫폼 위에서 실행되는 호스트 프로그램이 게스트 프로그램을 만들어 마치 독립된 환경을 만들어 낸 것 처럼 보여주는 기법 |
리소스 가상화 | 게스트 소프트웨어 위에서 사용자는 독립된 하드웨어에서 소프트웨어가 실행되는 것처럼 활용하는 기법 |
가상화 기술 요소
컴퓨팅 가상화 | 컴퓨터 리소스를 가상화하여 논리적 단위로 리소스를 활용할 수 있도록 하는 기술 ex ) 하이퍼바이저 (Hypervisor) |
스토리지 가상화 | 스토리지와 서버 사이에 소프트웨어/하드웨어 계층을 추가하여 스토리지를 논리적으로 제어 및 활용할 수 있도록 하는 기술 ex ) 분산 파일 시스템 |
I/O 가상화 | 서버와 I/O 디바이스 사이에 위치하는 미들웨어 계층으로, 서버의 I/O 자원을 물리적으로 분리하고 케이블과 스위치 구성을 단순화하여 효율적인 연결을 지원하느 기술 ex ) 가상 네트워크 인터페이스 카드 |
컨테이너 | 컨테이너화된 애플리케이션들이 단일 운영체제사에서 실행되도록 해주는 기술 하이퍼바이저 없이 운영체제가 격리된 프로세스로 동작하기 때문에 오버헤드가 낮음 ex ) 도커 (Docker) |
분산처리 기술(Distributed Computing) | 여러 대의 컴퓨터 계산 및 저장능력을 이용하여 커다락 계산문제나 대용량의 데이터를 처리하고 저장하는 기술 |
네트워크 가상화 기술 | 물리적으로 떨어져있는 다양한 장비들을 연결하기 위한 수단으로 중계장치 (라우터, 스위치 등 )의 가상화를 통한 가상 네트워크 (Virtual Network) 를 지원하는 기술 ex ) SDN, NFV |
클라우드 컴퓨틴 (Cloud Computing)
인터넷을 통해 가상화된 컴퓨터 시스템 리소스 (IT 리소스)를 제공하고, 정보를 자신이 컴퓨터가 아닌 클라우드(인터넷)에 연결된 다른 컴퓨터로 처리하는 기술
클라우드 컴퓨팅 분류 [사공하]
사설 클라우드 (Private Cloud) |
기업 또는 조직 내부에서 보유하고 있는 컴퓨팅 자원 (IDC, 서버 등)을 사용하여 내부에 구축되어 운영되는 클라우드 |
공용 클라우드 (Public Cloud) |
클라우드 서비스 제공 업체에서 다중 사용자를 위한 컴퓨팅 자원 서비스를 제공하는 클라우드 |
하이브리드 클라우드 (Hybrid Cloud) |
기업 또는 조직 내부 자원을 이용한 사설 클라우드와 공용 클라우드를 모두 사용하는 클라우드 |
클라우드 컴퓨팅 유형 [인플소]
인프라형 서비스 (Iaas ; Omftastructure as a Service) |
서버, 스토리지 같은 시스템 자원을 클라우드로 제공하는 서비스 |
플랫폼형 서비스 (Pass ; Platform as a Service) |
인프라를 생성, 관리하는 복잡함 없이 애플리케잇녀을 개발, 실행, 관리할 수 있게 하는 플랫폼을 제공하는 서비스 |
소프트웨어형 서비스 (Saas ; Software as a Service) |
소프트웨어 및 관련 데이터는 중앙에 호스팅되고 사용자는 웹 브라우저 등의 클라이언트를 통해 접속하여 소프트웨어를 서비스 형태로 이용하는 서비스 |
CH2. 네트워크 기초 활용하기
네트워크(Network)
원하는 정보를 원하는 수신자 또는 기긱에 정확하게 전송하기 위한 기반 인프라
WAN.LAN
OSI(Open System Intercommection) 7계층
국제 표준화 기구인 ISO에서 개발한 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 개방향 시스템 상호 연결 모델
프로토콜 | 전송단위 | 장비 | ||
응용 계층 Application Layer |
사용자와 네트워크 간 응용 서비스 연결, 데이터 생성 | HTTP FTP |
데이터 Data |
호스트 (PC 등) |
표현 계층 Presentation Layer |
데이터 형식 설정, 부호교환, 암'복호화 | JPEG MPEG |
||
세션 계층 Session Layer |
송수신 간의 논리적인 연결 연결 접속, 동기제어 |
RPC NetBios |
||
전송 계층 Transporty Layer |
송수신 프로세스 가니의 연결 신뢰성 있는 통신 보장 데이터 분할, 재조립,흐름제어, 오류제어, 혼잡제어 |
TCP UDP |
세그먼트 Segment |
P4 스위치 |
네트워크 계층 Network Layer |
ㄷ나말기 간 데이터 전송을 위한 최적화된 경로 제공 | IP ICMP |
패킷 Packet |
라우터 |
데이터링크 계층 Data Link Layer |
인접 시스템 간 데이터 전송, 전송 오류 제어 동기화, 오류 제어, 흐름 제어, 회선 제어 |
HDLC PPP |
프레임 Frame |
브리지, 스위치 |
물리 계층 Physical Layer |
0과 1의 비트 정보를 회선에 보내기 위한 전기적 신호 변환 | RS-232C | 비트 Bit |
허브, 리피터 |
네트워크 장비
1계층 장비
허브 | 여러 대의 컴퓨터를 연결하여 네트워크로 보내거나, 하나의 네트워크로 수신된 정보를 여러 대의 컴퓨터로 송신하기 위한 장비 |
리피터 | 디지털 신호를 증폭시켜 주는 역할을 하여 신호가 약해지지 않고 컴퓨터로 수신되도록 하는 장비 |
2계층 장비
브리지 | 두 개의 근거리통신망(LAN)을 서로 연결해주는 통신망 연결 장치 |
L2 스위치 | L2 스위치는 종류에 따라 3가지 방식 중 하나르 ㄹ사용 - Store and Forwading - Cut Through - Fragment Free |
NIC (Network Interface Card) 스위칭 허브 |
3계층 장비
라우터 | LAN+LAN, LAN+WAN을 연결하기 위한 인터넷 네트워킹 장비 |
게이트 웨이 L3 스위치 유무선 인터넷 공유기 망(백본) 스위칭 허브 |
4계층 장비
L4 스위치 |
프로토콜(Protocol)
서로 다른 시스템이나 기기들 간의 데이터 교환을 원활히 하기 위한 표준화된 통신 규약, '기술적 은어'
프로토콜의 기본 3요소 [구의타]
- 구문 (Syntax)
- 의미 (Semantic)
- 타이밍 (Timing)
네트워크 프로토콜(Networkd Protocol)
컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고받는 양식과 규칙의 체계
프로토콜 특징
- 단편화
- 재조립
- 캡슐화 : 상위 계층의 데이터에 각종 정보를 추가하여 하위 계층으로 보내는 기법
- 연결 제어
- 오류 제어
- 동기화 : 송신과 수신 측의 시점을 맞추는 기법
- 다중화
- 주소 지정
데이터 링크 계층 (Data Link Layer)
링크의 설정과 유지 및 종료를 담당하며 노드 간의 회선 제어, 흐름 제어, 오류 제어 기능을 수행하는 계층
데이터 링크 계층 프로토콜
HDLC (High0level Data Link Control) |
점대점 방식이나 다중방식의 통신에 사용되는 ISO에서 표준화한 동기식 비트 중심의 데이터 링크 프로토콜 |
PPP (Point-to-Point Protocol) |
네트워크 분야에서 두 통신 노드 간의 직접적인 연결을 위해 일반적으로 사용되는 데이터 링크 프로토콜 |
프레임 릴레이 (Frame Relay) |
프로토콜 처리를 간략화하여 단순히 데이터 프레임들의 중계(Relay) 기능과 다중화 기능만 수행함으로써 데이터 처리속도의 향상 및 ㅈ전송지연을 감소시킨 고속의 데이터 전송 기술 |
ATM (Asynchronous Transport Mode) |
정보전달의 기본단위를 53바이트 셀 단위로 전달하는 비동기실 시분할 다중화 방식의 패킷형 전송 기술 |
네트워크 계층 (Networkd Layer)
네트워크 계층 프로토콜
IP (Internet Protocol) |
송수신 간의 패킷 단위로 데이터를 교환하는 네트워크에서 정보를 주고받는데 사용한는 통신 프로토콜 |
ARP (Address Resoulution Protocol) |
IP 네트워크상에서 IP 주소를 MAC주소(물리주소)로 변환하는 프로토콜 |
RARP (Reverse Address Resoulution Protocol) |
물리 네트워크(MAC) 주소에 해당하는 IP 주소를 알려주는 역순 주소 결정 프로토콜 |
ICMP (Internet Control Message Protocol) |
IP 패킷을 처리할 때 발생되는 문제를 알려주는 프로토콜. ICMP 프로토콜을 사용해서 ping 유틸리티의 구현을 통해 오류가 발생했음을 알리는 기능을 수행 |
IGMP (Internet Group Managerment Protocol) |
인터넷 그룹 관리 프로토콜. 호스트 컴퓨터와 인접 라우터가 멀티캐스트 그룹 멤버십을 구성하는데 사용하는 통신 프로토콜 |
라우팅 프로토콜 (Routing Protocol) |
데이터 전송을 위해 목적지 까지 갈 수 이쓴 여러 경로 중 최적의 경로를 설저해주는 라우터 간의 상호 통신 프로토콜 |
IPv4 (Internet Protocol version 4)
인터넷에서 사용되는 패킷 교환 네트워크상에서 데이터를 교환하기 위한 32비트 주소체계를 갖는 네트워크 계층의 프로토콜
(A Class:0~128, B Class:129~191, C Class:192~223, D Class: 244~239 멀티캐스트, E Class: 240~255 연구)
IPv6 (Internet Protocol version 6)
현재 IPv4 가 가지고 있는 주소 고갈, 보안성, 이동성 지원 등의 문제점을 해결하기 위해서 개발된 128bit 주소체계를 갖는 차세대 인터넷 프로토콜
IPv4와 IPv6 특징
IPv4 | IPv6 |
32 bit = 8 bit *4 = 10.진수 | 128 bit = 16 bit * 8 , 16 진수 |
전송방식 [유멀브] 유니캐스트, 멀티캐스트,브로드 캐스트 |
전송방식 [유멀애] 유니캐스트, 멀티캐스트, 애니캐스트 |
IPv4 --> IPv6 전환 방법
- 듀얼 스택 (Dual Stack) : IP 계층에 두 가지 (IPv4, IPv6) 의 프로토콜의 모두 탑재되어 있고 통신 상대방에 따라 해당 IP 스택을 선택하는 방법
- 터널링 (Tunneling) : IPv6 망에서 인접한 IPv4 망을 거쳐 다른 IPv6 망으로 통신할 때 IPv4 망에 터널을 만들고 IPv4에서 사용하는 프로토콜로 캡슐화하여 전송하는 방법
- 주소 변환(Address Translation) : IPv4 망과 IPv6 망 사이에 주소 변환기 (IPv4-IPv6 게이트웨이) 를 사용하여 서로 다른 네트워크상의 패킷을 변환시키는 방법
멀티캐스트,유니캐스트,브로드캐스트,애니캐스트
- 멀티캐스트 (Mlticast Protocol): 인터넷에서 같은 내용의 데이터를 여러 명의특정한 그룹의 수신자들에게 동시에 전송할 수있는 프로토콜
- 유니캐스트 (Unicast Protocol) : 고유 주소로 식별된 하나의 네트워크 목적지에 1:1로 (One-to-One) 트래픽 또는 메시지를 전송하는 프로토콜
- 브로드캐스트(Broadcasting Protocol) : 하나의 송신자가 가튼 서브 네트워크상의 모든 수신자에게 데이터를 전송하는 프로토콜
- 애니캐스트(Anycast Protocol) : 하나의 호스트에서 그룹 내의 가장 가까운 곳에 있는 수신자에게 데이터를 전달하는 전송 기술
라우팅 프로토콜 (3계층)
- RIP (Routing Information Protocol) : As(Autonomous System : 자치 시스템 ; 자율 시스템 ) 내에서 사용하는 거리 벡터 (Distance-Vector) 알고리즘에 기초하여 개발된 내부 라우팅 프로토콜. 벨만-포드 알고리즘 사용
- OSPF (Open Shortest Path First) : 규모가 크고 복잡한 TCP/IP 네트워크에서 RIP의 단덤을 개선하기 위해 자신을 기준으로 링크 상태 (Link-Stage) 알고리즘을 적용하여 최단 경로를 찾는 라우팅 프로토콜. 다익스트라 알고리즘 사용
- BGP(Border Gateway Protocol) : AS 상호 간 (Inter-AS 또는 Inter-Domain)에 경로 정보를 교환하기 위한 라우팅 프로토콜. 가장 짧은 경로를 경로 벡터 (Path Ventor) 알고리즘을 통해 선정
- 라우팅 알고리즘 유형
거리 벡터 알고리즘 (Distance Vector Algorithm) : 인접 라우터와 정보를 공유하여 목적지까지의 거리와 방향을 결정하는 라우팅 프로토콜 알고리즘. 벨만-포드 알고리즘 사용
링크 상태 알고리즘 (Link State Algorithm) : 링크 상태 정보를 모든 라우터에 전달하여 최단 경로 트리를 구성하년
CH3. 기본 개발환경 구축하기
ㅇㅇ
'Univ. > 정보처리기사' 카테고리의 다른 글
디자인 패턴 (0) | 2023.07.27 |
---|---|
1. 요구사항 확인 (문제) (0) | 2022.11.25 |
1. 요구사항 확인 (0) | 2022.11.15 |
파이썬
디자인 패턴
디자인 패턴 유형
[생구행] : 생성/구조/행위
* 컴파일 타임 : 소스 코드를 작성하고 컴파일이라는 과정을 통해 기계어 코드로 변환되어, 실행 가능한 프로그램이 되는 과정 (정적 메모리 할당 수행)
목적 생성 - 객체 인스턴스 생성에 관여 , 클래스 정의와 객체 생성 방식을 구조화, 캡슐화 수행하는 패턴 구조 - 더 큰 구조나 형성 목적으로 클래스나 객체의 조합을 다루는 패턴 행위 - 클래스나 객체들 상호 작용하는 방법과 역할 분담을 다루는 패턴 범위 클래스 - 클래스 간 관련성(상속 관계를 다루는 패턴)
- 컴파일 타임에 정적으로 결정객체 - 객체 간 관련성을 다루는 패턴
- 런타임에 동적으로 결정
* 런타임 : 파일 컴파일 과정을 마친 프로그램은 사용자에 의해 실행되며, 이러한 응용 프로그램이 동작되는 과정 (동적 메모리 할당)
디자인 패턴 종류
생성 패턴 [생빌 프로 팩앱싱] : 생성(빌더/프로토타입/팩토리 메서드/앱스트랙 팩토리/싱글톤)
구조 패턴 [구 브데 퍼플 프록 컴 어] : 구조(브리지/데코레이터/퍼사이드/플라이웨이트/프록시/컴포지트/어댑터)
행위 패턴 [행 미인이 템옵 스테 비커 스트 매체] : 행위(미디에이터/인터프리터/이터레이터/템플릿 메서드/옵저버/스테이트/비지터/커맨드/스트레티지/메멘토/체인 오브 리스판서빌리티)
생성 패턴
[생빌 프로 팩앱싱] : 생성(빌더/프로토타입/팩토리 메서드/앱스트랙 팩토리/싱글톤)
Builder - 복잡한 인스턴스를 조립하여 만드는 구조로, 복합 객체를 생성할 때 객체를 생성하는 방법(과정)과 객체를 구현(표현)하는 방법을 분리함으로써 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있는 디자인 패턴
- 생성과 표기를 분리해서 복잡한 객체를 생성Prototype - 처음부터 일반적인 원형을 만들어 놓고, 그것을 복사한 후 필요한 부분만 수정하여 사용하는 패턴으로, 생성할 객체의 원형을 제공하는 인스턴스에서 생성할 객체들의 타입이 결정되도록 설정하여 객체를 생성할 때 갖추어야 할 기본 형태가 있을 때 사용되는 디자인 패턴
- 기존 객체를 복제함으로써 객체를 생성Factory
Method- 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성하도록 하는 방식으로, 상위 클래스에서는 인스턴스를 만드는 방법만 결정하고, 하위 클래스에서 그 데이터의 생성을 책임지고 조작하는 함수들을 오버라이딩 하여 인터페이스와 실제 객체를 생성하는 클래스를 분리할 수 있는 특성을 갖는 디자인 패턴
- 생성할 객체의 클래스를 국한하지 않고 객체를 생성Abstract
Factory- 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴으로 이 패턴을 통해 생성된 클래스에서는 사용자에게 인터페이스(API)를 제공하고, 구체적인 구현은 Con-create Product 클래스에서 이루어지는 특징을 갖는 디자인 패턴
- 동일한 주제의 다른 팩토리를 묶음Singleton - 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 디자인 패턴
- 한 클래스에 한 객체만 존재하도록 제한
구조 패턴
[구 브데 퍼플 프록 컴 어] : 구조(브리지/데코레이터/퍼사이드/플라이웨이트/프록시/컴포지트/어댑터)
Bridge - 기능의 클래스 계층과 구현의 클래스 계층을 ?? 구현부에서 추상 계층을 분리하여 추상화된 부분과 실제 구현 부분을 독립적으로 확장할 수 있는 디자인 패턴
- 구현뿐만 아니라, 추상화된 부분까지 변경해야 하는 경우 활용Decorator - 기존에 구현되어 있는 클래스에 필요한 기능을 추가해 나가는 설계 패턴으로 기능 확장이 필요할 때 객체 간의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있게 해주어 상속의 대안으로 사용하는 디자인 패턴
- 객체의 결합을 통해 기능을 동적으로 유연하게 확장Facade - 복잡한 시스템에 대하여 단순한 인터페이스를 제공함으로써 사용자와 시스템 간 또는 여타 시스템과의 결합도를 낮추어 시스템 구로에 대한 파악을 쉽게 하는 패턴으로 오류에 대해서 단위별로 확인할 수 있게 하며, 사용자의 측면에서 단순한 인터페이스 제공을 통해 접근성을 높일 수 있는 디자인 패턴
- 통합된 인터페이스 제공Flyweight - 다수의 객체로 생성될 경우 모두가 갖는 본질적인 요소를 클래스 화하여 공유함으로써 메모리를 절약하고, '클래스의 경량화'를 목적으로 하는 디자인 패턴
- 여러 개의 '가상 인스턴스'를 제공하여 메모리 절감Proxy - '실제 객체에 대한 대리 객체'로 실체 객체에 대한 접근 이전에 필요한 행동을 취할 수 있게 만들며, 이 점을 이용해서 미리 할당하지 않아도 상관없는 것들을 실제 이용할 때 할당하게 하여 메모리 용령을 아낄 수 있으며, 실체 객체를 드러나지 않게 하여 정보은닉의 역할도 수행하는 디자인 패턴
- 특정 객체로의 접근을 제어하기 위한 용도로 사용Composite - 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 하는 패턴
- 복합 객체와 단일 객체를 동일하게 취급Adapter - 기존에 생성된 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할을 하는 인터페이스를 만드는 패턴으로, 상속을 이용하는 클래스 패턴과 위임을 이용하는 인스턴스 패턴의 두 가지 형태로 사용되는 디자인 패턴
- 인터페이스가 호환되지 않는 클래스들을 함께 이용할 수 있도록 타클래스의 인터페이스를 기존 인터페이스에 덧씌움
행위 패턴
[행 미인이 템옵 스테 비커 스트 매체] : 행위(미디에이터/인터프리터/이터레이터/템플릿 메서드/옵저버/스테이트/비지터/커맨드/스트레티지/메멘토/체인 오브 리스판서빌리티)
Mediator - 객체 지향 설계에서 객체의 수가 너무 많아지면 서로 간 통신을 위해 복잡해져서 객체 지향에서 가장 중요한 느슨한 결합의 특성을 해칠 수 있기 때문에 이를 해결하는 방법으로 중간이 에를 통제하고 지시할 수 있는 역할을 하는 중재자를 두고, 중재자에게 모든 것을 요구하여 통신의 빈도수를 줄여 객체 지향의 목표를 달성하게 해주는 디자인 패턴
- 상호 작용의 유연한 변경을 지원Interpreter - 언어의 다양한 해석, 구체적으로 구문을 나누고 그 분리된 구문의 해석을 맡는 클래스를 각각 작성하여 여러 형태의 언어 구문을 해석할 수 있게 만드는 디자인 패턴
- 문법 자체를 캡슐화하여 사용Iterator - 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 방법을 제공하는 디자인 패턴
- 내부구조를 노출하지 않고, 복잡 객체의 원소를 순차적으로 접근 가능하게 해주는 행위 패턴Template Method - 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴으로 일반적으로 상위 클래스(추상클래스)에는 추상 메서드를 통해 기능의 골격을 제공하고, 하위 클래스(구체 클래스)의 메서드에는 세부 처리를 구체화하는 방식으로 사용하며 코드 양을 줄이고 유지보수를 용이하게 만드는 특징을 갖는 디자인 패턴
- 상위 작업의 구조를 바꾸지 않으면서 서브 클래스로 작업의 일부분을 수행Observer - 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에 연락이 가고 자동으로 내용이 갱신되는 방법으로 일대 다의 의존성을 가지며 상호 작용하는 객체 사이에서는 가능하면 느슨하게 결합하는 디자인 패턴
- 객체의 상태 변화에 따라 다른 객체의 상태도 연동, 일대다 의존State - 객체 상태를 캡슐화하여 클래스화함으로써 그것을 참조하게 하는 방식으로 상태에 따라 다르게 처리할 수 있도록 행위 내용을 변경하여, 변경 시 원시코드의 수정을 최소화할 수 있고, 유지보수의 편의성도 갖는 디자인 패턴
- 객체의 상태에 따라 행위 내용을 변경Visitor - 각 클래스 데이터 구조로부터 처리 기능을 분리하여 별도의 클래스를 만들어 놓고 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 만드는 패턴으로, 객체의 구조는 변경하지 않으면서 기능만 따로 추가하거나 확장할때 사용하는 디자인 패턴
- 특정 구조를 이루는 복합 객체의 원소 특정에 따라 동작을 수행할 수 있도록 지원하는 행위Command - 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴으로 하나의 추상 클래스에 메서드를 만들어 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행되는 특징을 갖는 디자인 패턴
- 요구사항을 객체로 캡슐화Strategy - 알고리즘 군을 정의하고(추상 클래스) 같은 알고리즘을 각각 하나의 클래스로 캡슐화한 다음, 필요할때 서로 교환해서 사용할 수 있게 하는 패턴으로, 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 디자인 패턴
- 행위 객체를 클래스로 캡슐화해 동적으로 행위를 자유롭게 변환Memento - 클래스 설계 관점에서 객체의 정보를 저장할 필요가 있을 때 적용하는 디자인 패턴으로 Undo 기능을 개발할 때 사용하는 디자인 패턴
- 객체를 이전 상태로 복구시켜야 하는 경우, '작업취소(Undo)' 요청 가능Chain of Responsibility - 정적으로 어떤 기능에 대한 처리의 연결이 하드코딩 되어 있을 때 기능 처리의 연결 변경이 불가능한데, 이를 동적으로 연결되어 있는 경우에 따라 다르게 처리될 수 있도록 연결한 디자인 패턴
- 한 요청을 2개 이상의 객체에서 처리
'Univ. > 정보처리기사' 카테고리의 다른 글
11. 응용 SW 기초 기술 활용 (0) | 2023.08.28 |
---|---|
1. 요구사항 확인 (문제) (0) | 2022.11.25 |
1. 요구사항 확인 (0) | 2022.11.15 |
1. 요구사항 확인 (문제)
1. 요구사항 확인
[백준/python3] if문
단계별로 풀어보기 - 2. if문
- 1 단계 1330번 두 수 비교하기
a,b = input().split()
a = int(a)
b = int(b)
if a<b :
print('<')
elif a>b :
print('>')
elif a==b :
print('==')
- 2 단계 9498번 시험 성적
score = int(input())
if 90 <= score <=100 :
print('A')
elif 80 <= score <=89 :
print('B')
elif 70 <= score <=79 :
print('C')
elif 60 <= score <=69 :
print('D')
else :
print('F')
- 3 단계 2753번 윤년
윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.
year = int(input())
if year%4 == 0 and (year % 400 == 0 or year % 100 !=0) :
print(1)
else :
print(0)
- 4 단계 14681번 사분면 고르기
x = int(input())
y = int(input())
if(x>0 and y>0):
print(1)
elif(x>0 and y<0) :
print(4)
elif(x<0 and y>0) :
print(2)
elif(x<0 and y<0) :
print(3)
- 5 단계 2884번 알람 시계
45분 일찍 알람 설정하기
H,M = input().split()
H = int(H)
M = int(M)
if M > 44 :
print(H, M-45)
elif M <45 and H >0 :
print(H-1,M+15)
else :
print(23,M+15)
*규칙 찾기
'Baekjun' 카테고리의 다른 글
[백준/python3] 입출력과 사칙연산 (0) | 2021.03.29 |
---|
[백준/python3] 입출력과 사칙연산
단계별로 풀어보기 - 1. 입출력과 사칙연산
- 1 단계 2557번 Hello World
print('Hello World!')
- 2 단계 10718번 We love kriii
print('강한친구 대한육군')
print('강한친구 대한육군')
- 3 단계 10171번 고양이
print(
"\ /\ ",
" ) ( ')",
"( / )",
" \(__)|"
,sep="\n")
- 4 단계 10172번 개
print(
"|\_/|",
"|q p| /}",
'( 0 )"""\ ',
'|"^"` |',
"||_/=\\\__|"
,sep="\n")
- 5 단계 1000번 A+B
a,b = input("").split()
print(int(a)+int(b))
#64ms
a,b = map(int,input("").split())
print(a+b)
#72ms
- 6 단계 1001번 A-B
a,b = input("").split()
print(int(a)-int(b))
- 7 단계 10998번 A*B
a,b = input("").split()
print(int(a)*int(b))
- 8 단계 1008번 A/B
a,b = input("").split()
print(int(a)/int(b))
- 9 단계 10869번 사칙연산
a,b = input("").split()
print(int(a)+int(b))
print(int(a)-int(b))
print(int(a)*int(b))
print(int(a)//int(b)) # 소수점 포함하는 값이 아닌 몫만 가져온다.
print(int(a)%int(b))
'''출력:
10
4
21
2
1
'''
- 10 단계 10430번 나머지
(A+B)%C는 ((A%C) + (B%C))%C 와 같을까?
(A×B)%C는 ((A%C) × (B%C))%C 와 같을까?
세 수 A, B, C가 주어졌을 때, 위의 네 가지 값을 구하는 프로그램
A,B,C = input("").split()
A = int(A)
B = int(B)
C = int(C)
print((A+B)%C)
print(((A%C) + (B%C))%C)
print((A*B)%C)
print(((A%C)*(B%C))%C)
'''
입력 :
5 8 4
출력:
1
1
0
0
'''
- 11 단계 2588번 곱셈
a = int(input())
b = int(input())
# // 몫 연산, % 나머지 연산
out1 = a*((b%100)%10)
out2 = a*((b%100)//10)
out3 = a*(b//100)
result = a*b
print(out1,out2,out3,result,sep="\n")
'Baekjun' 카테고리의 다른 글
[백준/python3] if문 (0) | 2021.03.29 |
---|