코딩테스트/백준) 단계별로 풀기

백준- 단계별로 풀어보기| 6단계- 심화 1

영최 2023. 4. 1. 01:59
728x90
단계 문제 번호 제목 내 코드 코드 비교
4 10812  바구니 순서 바꾸기 N, M = map(int,input().split())
basket = [ i+1 for i in range(N)]
for n in range(M):
    i,j,k = map(int,input().split())
    #틀린 코드
    temp = basket[i-1:k-1]
    basket[i-1:k-1] = basket[k-1:]
    basket[k-1:] = temp

    #맞은 코드
    basket = basket[:i-1] + basket[k-1:j] + basket[i-1:k-1] + basket[j:]


print(' '.join(map(str,basket)))
n, m = map(int, input().split()) 

box = [i+1 for i in range(n)] 

for _ in range(m):
    i,j,k = map(int, input().split())
    box=box[:i-1]+box[k-1:j]+box[i-1:k-1]+box[j:]

for b in box:
    print(b, end=' ')
basket[i-1:k-1] = basket[k-1:]
여기서 배열 길이가 서로 다를 수 있기 때문에 값을 넣지말고 '+'로 전체 리스트를 생성한다. 

또 순서 뒤집기에 영향을 받지 않는 양 끝 단도 넣어줘야함을 명심한다.
5 10988 팰린드롬인지 확인하기 a = list(input())
li = []
n = len(a) 
#틀린 코드
for i in range(n//2): 
    if a[i] == a[n-1-i]: 

#맞은 코드
for i in range((n//2)+1):  
    if a[i] == a[-1-i]: 
        li.append(1)
    else:
        li.append(0)
        
print(min(li))
a = list(input())
print(1 if(a[::-1]== a) else 0)
파이썬 문자열을 리스트로 변환하는 방법: list(str)

컴파일 에러시 리스트 인덱스 확인

n-1-i 로 검사했더니 홀수 일때 가운데 글자를 검사 안해줘서 그런지 계속 런타임 오류가 나서 
범위를 n//2 +1 , 마지막 인덱스를 -1-i 로 변경했더니 잘 작동되었다.

펠린드롬은 거꾸로 해도 같아야한다[::-1]이용
6 1157 단어 공부 a = list(input().upper())
a_set = list(set(a))
a_count = [ a.count(i)for i in a_set]

if a_count.count(max(a_count)) != 1:
    print('?')
else:
    idx = a_count.index(max(a_count))
    print(a_set[idx])
 
a_count.count에서 .count 안써줘서 틀렸었음

이후 문제 조건에서 대소문자 구분을 안한다는 조건을 안봐서
upper()을 안해줘서 틀렸음

7 4344  평균은 넘겠지 num = int(input())
for i in range(num):
    li = list(map(int,input().split()))
    total_num = li[0]
    score_li = li[1:]
    mean = sum(score_li) / total_num
    upper_std = len([ i for i in score_li if i > mean])
    per =  "%0.3f%%" % (upper_std/total_num*100)
    print(per)
 
list에서 평균 구하는 내장방식은 없음 -> sum(list)/len(list)

round()는 없는 소수점을 만들 수 없음 만들려면 "{:.3f}".format(num)
만약 퍼센트 단위로 출력할 때에는 "%.3f%%" % (num)
그리고 퍼센트일 때 꼭 비율 * 100 해줄 것 
8 2941  크로아티아 알파벳 #틀림
a = input()


cro_li = ['c=','c-','dz=','d-','lj','nj','s=','z=']

part_li = [ [part,a.count(part)]  for  part in cro_li if part!='dz=' and part!='z=' and part in a]


if ('dz=' in a) and ('dz=z=' not in a):
    part_li.append(['dz=',a.count('dz=')])
    
elif ('dz=' in a) and ('dz=z='in a):
    part_li.append(['dz=',a.count('dz=z=')])
    part_li.append(['z=',a.count('dz=z=')])

sum = 0
for (part,num) in part_li:
    sum +=num
    for i in range(num):
        a = a.replace(part,'')
print(len(list(str(a))) + sum)
croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
word = input()

for i in croatia :
    word = word.replace(i, '*')  # input 변수와 동일한 이름의 변수
print(len(word))
해당하는 문자를 '*'표시해서 중복을 줄이고 마지막에 글자수 출력
이때 'dz='가 'z='보다 순서가 먼저여야한다. 

9 1316 그룹 단어 체커 n =int(input())

count = 0
for i in range(n):
    s = list(input())
    part = set(s)
    li = []
    for p in part:
        idxs = []
        for i in range(len(s)):
            if s[i] == p:
                idxs.append(i)
        if len(idxs) == 1:
            li.append(0)
        else:
            for i in range(len(idxs)-1):
                if abs(idxs[i]-idxs[i+1]) != 1:
                    li.append(1)
                else:
                    li.append(0)
    if max(li) == 0:
        count += 1

print(count)
N = int(input())
cnt = N

for i in range(N):
    word = input()
    for j in range(0, len(word)-1):
        if word[j] == word[j+1]:
            pass
        elif word[j] in word[j+1:]:
            cnt -= 1
            break

print(cnt)
글자수에서 만약 다음 글자와 동일하면 pass, 아니라면 -1후 바로 break해서
다음 입력된 글자를 확인하는 방식으로 해야한다.
굳이 문자열을 리스트오 만들지 않아도 문자열 자체에서 for문으로 확인 가능하다.
10 25206 너의 평점은 grade2score = {
    '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
}
total_credit = 0
total_score = 0
while(True):
    try:
        classname, credit, grade = input().split()
        credit = float(credit)
        if grade == 'P':
            pass
        else:
            total_credit += credit
            total_score += credit*grade2score[grade]
            
    except:  
        print(total_score/total_credit)     
        break
 
credit = float(credit) 이부분에서 int로 했더니 출력이 안되었다.
문자열이라도 맞는 형식으로 써주자.

 

728x90