본문 바로가기
Algorithm/Step by Step

[단계별로 풀어보기] 심화 1

by lifeisgenie 2023. 4. 2.

https://www.acmicpc.net/problem/25083

 

25083번: 새싹

아래 예제와 같이 새싹을 출력하시오.

www.acmicpc.net

print('         ,r\'\"7')
print('r`-_   ,\'  ,/')
print(' \. \". L_r\'')
print('   `~\/')
print('      |')
print('      |')

 

https://www.acmicpc.net/problem/3003

 

3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰

첫째 줄에 동혁이가 찾은 흰색 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수가 주어진다. 이 값은 0보다 크거나 같고 10보다 작거나 같은 정수이다.

www.acmicpc.net

chess = [1, 1, 2, 2, 2, 8]

n_list = list(map(int, input().split()))
for i in range(len(chess)):
    chess[i] -= n_list[i]
    print(chess[i], end=' ')

 

https://www.acmicpc.net/problem/2444

 

2444번: 별 찍기 - 7

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

n = int(input())

for i in range(1, n):
    print(' '*(n-i) + '*'*(2*i-1))
    
for i in range(n, 0, -1):
    print(' '*(n-i) + '*'*(2*i-1))

 

https://www.acmicpc.net/problem/10812

 

10812번: 바구니 순서 바꾸기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2

www.acmicpc.net

n, m = map(int, input().split())
b_list = [i for i in range(1, n+1)]

for i in range(m):
    i, j, k = map(int, input().split())
    b_list = b_list[:i-1]+b_list[k-1:j]+b_list[i-1:k-1]+b_list[j:]
    
for b in b_list:
    print(b, end=" ")

 

https://www.acmicpc.net/problem/10988

 

10988번: 팰린드롬인지 확인하기

첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

www.acmicpc.net

s = input()
// 삼항연산자를 이용해서 입력받은 단어와 슬라이싱을 통해서 뒤집은 단어가 같은지를 비교
print(1) if s == s[::-1] else print(0)

 

https://www.acmicpc.net/problem/1157

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

s = input().upper() // 입력받은 단어를 전부 다 대문자로 변환
// set 함수를 이용해서 대문자로 변환된 단어 중 중복되는 알파벳을 제거한 리스트
s_list = list(set(s)) 

cnt_list = [] // 빈 리스트
// 중복 제거 된 알파벳 리스트 안에 요소들이 입력받은 단어 안에 몇 개씩 있는지 개수를 파악
for idx in s_list:
    cnt_list.append(s.count(idx)) // 빈 리스트에 개수 넣기

// 가장 많이 사용된 알파벳을 알아내는데, 여러 개 존재하는 경우에는 ?를 출력
if cnt_list.count(max(cnt_list)) > 1:
    print("?")
else: // 가장 많이 사용된 알파벳이 하나일 때 
    cnt = cnt_list.index(max(cnt_list)) // 개수 리스트에서 가장 큰 개수의 인덱스를 cnt에 초기화
    // s_list의 알파벳과 cnt_list의 개수의 위치는 같으므로 가장 많이 사용된 알파벳 출력
    print(s_list[cnt])

 

https://www.acmicpc.net/problem/4344

 

4344번: 평균은 넘겠지

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

www.acmicpc.net

c = int(input())

for i in range(c):
    stu = list(map(int, input().split()))
    
    avr = (sum(stu) - stu[0]) / stu[0]
    cnt = 0
    for j in range(1, len(stu)):
        if stu[j] > avr:
            cnt += 1 
    
    score = cnt / stu[0] * 100
    print(f'{score:.3f}%')

 

https://www.acmicpc.net/problem/2941

 

2941번: 크로아티아 알파벳

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=

www.acmicpc.net

alphabet = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] // 크로아티아 알파벳

s = input() // 입력받은 단어

for i in alphabet:
    s = s.replace(i, '*') // replace 함수를 통해서 크로아티아 알파벳이 s안에 있으면 *로 대체
print(len(s)) // 대체된 단어의 길이 출력

 

https://www.acmicpc.net/problem/1316

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때

www.acmicpc.net

n = int(input())

for _ in range(n):
    s = input()
    s_list = [s[0]]
    cnt = 0
    
    for i in range(1, len(s)):
        if s[i] not in s_list and s[i] != s[i-1]:
            s_list.append(s[i])
        elif s[i] == s[i-1]:
            continue
        else:
            cnt += 1
            
    if cnt > 0:
        n -= 1
            
print(n)

 

https://www.acmicpc.net/problem/25206

 

25206번: 너의 평점은

인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다! 치

www.acmicpc.net

rank_dict = {"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}

scores = 0 
res = 0 
for _ in range(20):
    sub, grade, rank = input().split()
    grade = float(grade)
    
    if rank == 'P':
        continue
    scores += grade
    res += grade * rank_dict[rank]
    
print('%.6f' % (res / scores))