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
'코딩테스트 > 백준) 단계별로 풀기' 카테고리의 다른 글
백준- 단계별로 풀어보기| 8단계- 일반 수학1 (0) | 2023.04.06 |
---|---|
백준- 단계별로 풀어보기| 7단계- 2차원 배열 (0) | 2023.04.04 |
코딩테스트 - 파이썬 (0) | 2023.03.30 |
백준- 단계별로 풀어보기| 3단계- 반복문 (0) | 2023.03.15 |
백준- 단계별로 풀어보기| 2단계- 조건문 (1) | 2023.03.09 |