Algorithm

백준 1157, 2851, 2941 / 프로그래머스 76501 정리

김디니 2022. 7. 31. 22:39

1157 단어공부

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

# 오답
word = input().upper()
check = set(word)
result = []
​
for i in check:
    result.append(str(word.count(i)))
result1 = max(result)
​
print(result1[i]) # 오류
​

TypeError: string indices must be integers

i가 str이기 때문에 인덱스 슬라이싱이 불가능하다.

word = input().upper()
chr_list = list(set(word))
chr_cnt = []
​
for i in chr_list:
  cht_cnt.append(word.count(i))
 
if chr_cnt.count(max(chr_cnt)) > 1:
  print('?')
​
else:
  print(chr_list[chr_cnt.index(max(chr_cnt))])

chr_cnt에서 문자 개수를 세어 가장 큰 수를 index()로 찾아

큰 수에 해당하는 해당 문자를 chr_list에서 찾아 출력한다.

else문은 인덱싱을 실행한다.

chr_cnt.index(max(chr_cnt))])

chr_cnt에서 찾아(index()), chr_cnt에서 제일 큰 수를.

print(chr_list[

(위 구문)에 해당하는 인덱스를 chr_list에서 찾아 출력해.

2851 슈퍼마리오

슈퍼 마리오 앞에 10개의 버섯이 일렬로 놓여져 있다. 이 버섯을 먹으면 점수를 받는다.

첫 버섯을 먹지 않았다면, 그 이후 버섯도 모두 먹을 수 없다.

마리오는 받은 점수의 합을 최대한 100에 가깝게 만들려고 한다.

mushrooms =[]                       # 입력값을 저장할 리스트
result = 0                          # 더한 값을 저장할 변수
​
for i in range(10) :                # 10번의 점수(입력값)을 반복해서 
    mushrooms.append(int(input()))  # 버섯 리스트에 넣어준다
    
for j in range(10) :                # 10개의 버섯을 반복해서 더해주며 result에 값을 넣는다.  
    result += mushrooms[j]          # 버섯의 점수들을 result에 넣는다. (합산 점수)
    before_result = result           # result의 값을 under_result에 저장해둔다. (100을 넘어갈 상황에 대비하여 원래 값을 저장한다)
    
    # 100을 넘을 때 
    if result >= 100 :              # 만약 합산 점수가 100을 넘는다면
        over = result - 100         # 얼마나 넘었는지 계산
        under = 100 - under_result  # 얼마나 안넘었는지 계산
        if over <= under:           # 만약 under 더 크다면 (100을 넘지 않은 합산 점수의 차)
            print(result)           # 100을 넘은 점수를 출력한다. 
            break                   # over와 under의 값이 클수록 100과 멀어지기 때문에 더 작은 것을 택한다.
        else:
            print(under_result)
            break
    
else:                               # 다 더해도 100을 넘지 않으면 그 값을 그냥 출력한다. 
    print(result)

over, under와 같은 변수를 줄일 수 있다.

for i in range(1, 11):
    mushrooms = int(input())
    before_result = result
​
    result += score
​
    if result >= 100:
        if (result - 100) > (100 - before_result):
            result = before_result
        break
​
print(result)

입력값을 받을 수 있는 for문을 하나 줄인다.

over와 under 같은 변수들을 줄이고 (result -100)과 같이 바로 비교한다.

if (result - 100) > (100 - before_result):
            result = before_result

만약 100이 넘은 값의 차가 100을 넘지 않은 이전 합산의 차보다 클 경우 (100에서 더 멀다는 뜻)

이전 값을 result로 바꿔준다. (위 코드에서 이전 값을 result가 받고 있다)

 

2941 크로아티아 알파벳

입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

alphabet = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
word = input()

for i in alphabet :
    word = word.replace(i, '!')

print(len(word))

c=, c-와 같은 크로아티아 알파벳은 두 개의 문자열로 인식한다. 

.replace를 이용하여 크로아티아 알파벳과 입력값과 일치하는 문자열을 '!'로 바꿔준다. 그리고 word에 저장한다. 

하나의 문자열로 만들어주었기 때문에 word에 저장되어 있는 '!' 개수를 세어 출력한다. 

 

76501 음양 더하기

정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어진다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성한다.

def solution(absolutes, signs):
    
    answer = 0
    
    for i in range(len(absolutes)) :        # 절대값의 원소 개수로 인덱스 위치를 표현해준다.
        
        if signs[i] == False :              # 순회 시 false가 있다면
            answer += (absolutes[i] * -1)   # 절대값 리스트에서의 해당 인덱스 위치 값에 -1을 곱해준 후 (음수값으로 변환)
                                            # answer에 넣어준다. 
        else:
            answer += absolutes[i]          # false가 없다면(true 라면) answer에 넣어준다. 
        
    return answer

absolutes는 정수의 배열이고, signs는 boolean이다. 

boolean 값이 false가 나오면 정수를 음수의 값으로 변경해주어야 하기 때문에

absolutes[i]에 -1을 곱하여 음수로 만들어준다. 그리고 anwer 변수에 값을 넣어준다. 

이 과정을 반복하여 answer에 계산된 정수의 값들을 반환한다.