백준 [단계별로 풀어보기]: (6단계) "심화 1", python
1. 문제번호 및 정답비율

2. 문제별 필요 지식 및 풀이 포인트
# 1. 25083 새싹
' 또는 "를 출력하기 위해서는, 기호들 '앞'에 \를 넣어줘야
# 2. 3003 킹,퀸,룩,비숍,나이트,폰
print(*c) #언패킹
# 3. 2444 별 찍기-7
역순출력: range(start,end,-1)
# 4. 10988 팰린드롬인지 확인하기
참고1: https://codingsmu.tistory.com/169
strs = strs.lower()
strs = re.sub('[^a-z0-9]','',strs)
#참고1-1: https://regexr.com/
정규표현식[^a-z0-9] : 모든소문자와 숫자를 제외한(캐럿(^)) 문자
#참고1-2: https://velog.io/@yoopark/r-prefix-in-regexp (정규식의 r prefix 의미)
def function(self, paragraph: str, banned: List[str]) -> str:
words = re.sub(r'[^\w]','',paragraph)
#의 의미: paragraph 각 문자를 돌면서 [0-9a-zA-Z]에 해당 않는 문자는 Spacebar로 변환한다는 뜻
#아마 단어별로 split하기 편하게 전처리하는 작업 아닐까
참고2: https://baechu-story.tistory.com/17
파이썬에서 함수 정의 시 def function() -> str
#return값의 자료형을 명시하는 용도로 코드 작동에 영향을 주지 않음
# 5. 1157 단어 공부
set()은 중복을 제거해준다.
w = input().upper() #mississipi
s = list(set(w))
# 6. 2941 크로아티아 알파벳
croatia단어를 1가지 임의 단어로 대체하여 문자열 길이 측정
# 7. 1316 그룹 단어 체커
# 8. 25206 너의 평점은
r = ['A+', 'A0', 'B+', 'B0', 'C+', 'C0', 'D+', 'D0', 'F']
g = [4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0]
scoreXgrade = score * g[r.index(grade)] #grade에 해당하는 r의 index값에서부터 가져온 g값과 score를 곱한다.
포맷팅 = 1)문자열: '%s' %(str값) 2)정수: '%d' %(int값) 3)실수: '%f' %(숫자)
참고: https://modulabs.co.kr/blog/python-strangethings/
3. 문제별 풀이 코드
# 1. 25083 새싹
#' 또는 "를 출력하기 위해서는, 기호들 '앞'에 \를 넣어줘야
#파이썬에서 삼중따옴표의 특징: https://www.geeksforgeeks.org/triple-quotes-in-python/
print(" ,r\'\"7")
print("r`-_ ,\' ,/")
print(" \. \". L_r\'")
print(" `~\/")
print(" |")
print(" |")
# 2. 3003 킹,퀸,룩,비숍,나이트,폰
#n = list(map(int, input().split())) #1 1 2 2 2 8
#print(1-n[0], 1-n[1], 2-n[2], 2-n[3], 2-n[4], 8-n[5])
c = [1,1,2,2,2,8]
n = list(map(int, input().split()))
for i in range(len(n)):
c[i] -= n[i]
print(*c) #언패킹
# 3. 2444 별 찍기-7
'''역순출력: range(start,end,-1)
공백 별개수(2n-1)
4=5-1 1
3=5-2 3
2=5-3 5
1=5-4 7
0=5-5 9
'''
n = int(input())
for i in range(1,n):
print(" "*(n-i)+"*"*(2*i-1))
for i in range(n,0,-1): #역순출력: range(start,end,-1)
print(" "*(n-i)+"*"*(2*i-1))
'''숏코딩을 보면 현타가 온다
n=m=int(input())
while l:=n-abs(m:m-1):print(' '*(n-l)+'*'*(l*2-1))
'''
# 4. 10988 팰린드롬인지 확인하기
w = input()
t_boolean = 1
for i in range(len(w)//2):
if w[i] != w[len(w)-i-1]: #w[i] == w[len(w)-i-1] 같다고 풀면 안 되네 흠
t_boolean = 0
break
print(t_boolean)
'''다른풀이
w = input()
if w == w[::-1]:
print(1)
else:
print(0)'''
'''또다른풀이
참고1: https://codingsmu.tistory.com/169
strs = strs.lower()
strs = re.sub('[^a-z0-9]','',strs)
#참고1-1: https://regexr.com/
정규표현식[^a-z0-9] : 모든소문자와 숫자를 제외한(캐럿(^)) 문자
#참고1-2: https://velog.io/@yoopark/r-prefix-in-regexp (정규식의 r prefix 의미)
def function(self, paragraph: str, banned: List[str]) -> str:
words = re.sub(r'[^\w]','',paragraph)
#의 의미: paragraph 각 문자를 돌면서 [0-9a-zA-Z]에 해당 않는 문자는 Spacebar로 변환한다는 뜻
#아마 단어별로 split하기 편하게 전처리하는 작업 아닐까
참고2: https://baechu-story.tistory.com/17
파이썬에서 함수 정의 시 def function() -> str
#return값의 자료형을 명시하는 용도로 코드 작동에 영향을 주지 않음
'''
# 5. 1157 단어 공부
w = input().upper() #mississipi
s = list(set(w)) #['m','i','s','p']
cnt = []
for i in s:
cnt.append(w.count(i)) #[4,4,1,1]
if cnt.count(max(cnt)) > 1: #cnt의 최대값(횟수) 1보다 크면 (=최대 횟수가 같은게 있으면)
print("?")
else:
print(s[cnt.index(max(cnt))])
# 6. 2941 크로아티아 알파벳
croa = ['c=','c-','dz=','d-','lj','nj','s=','z=']
w = input()
for i in croa: #if i in w:는 불필요한 코드
w = w.replace(i,'/') #croa단어를 1가지 임의 단어로 대체하여 문자열 길이 측정
print(len(w))
# 7. 1316 그룹 단어 체커
n = int(input())
cnt = n #그룹단어개수가 입력수만큼이라고 설정하고, 아니라면 빼준다.
for i in range(n):
w = input()
for j in range(len(w)-1):
if w[j] == w[j+1]:
pass
elif w[j] in w[j+1:]: #w[j+1:] : j+1부터 마지막까지
cnt -= 1
break
print(cnt)
# 8. 25206 너의 평점은
rating = {"A+": 4.5, "A0": 4.0, "B+": 3.5, "B0": 3.0,
"C+": 2.5, "C0": 2.0, "D+": 1.5, "D0": 1.0, "F": 0.0}
scoreXgrade = 0 #학점x등급별평점
total = 0 #총학점
for i in range(20): #20과목
subjet, score, grade = input().split()
score = float(score)
if grade != 'P': #P/F는 평점계산에서 제외(=Pass가 아닌것들만 계산)
scoreXgrade += score * rating[grade] #등급grade를 곱할 순 없으니, 등급별평점rating[grade]을 곱한다.
total += score
print('%.6f' % (scoreXgrade/total)) #'.6f': 소숫점아래 여섯자리까지 표현, print(format(),'.6f')도 가능
'''평점을 list로 두개로 나눠 표현했을 때
r = ['A+', 'A0', 'B+', 'B0', 'C+', 'C0', 'D+', 'D0', 'F']
g = [4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0]
scoreXgrade = score * g[r.index(grade)] #grade에 해당하는 r의 index값에서부터 가져온 g값과 score를 곱한다.
포맷팅 1)문자열: '%s' %(str값) 2)정수: '%d' %(int값) 3)실수: '%f' %(숫자)
참고: https://modulabs.co.kr/blog/python-strangethings/
''''PS > BOJ : 단계별로 풀어보기' 카테고리의 다른 글
| 백준 [단계별로 풀어보기]: (8단계) "일반 수학 1", python (5) | 2024.09.01 |
|---|---|
| 백준 [단계별로 풀어보기]: (7단계) "2차원 배열", python (2) | 2024.08.23 |
| 백준 [단계별로 풀어보기]: (5단계) "문자열", python (0) | 2024.08.20 |
| 백준 [단계별로 풀어보기]: (4단계) "1차원 배열", python (3) | 2024.08.17 |
| 백준 [단계별로 풀어보기]: (3단계) "반복문", python (2) | 2024.08.17 |