본문 바로가기

PS/BOJ : 단계별로 풀어보기

백준 [단계별로 풀어보기]: (6단계) "심화 1", python

반응형

백준 [단계별로 풀어보기]: (6단계) "심화 1", python

 

1. 문제번호 및 정답비율

6단계 심화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/
'''
반응형