코딩테스트

하루 코테 3개 풀기 - 4일차

songsua 2024. 12. 13. 23:44

1. 원하는 알파벳 찾기(백준10809)

알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.

#알파벳 소문자로만 이루어진 단어 S가 주어진다. 
# 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 
# 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
#word 라는 문자를 입력 받았을 때 배열에 넣고 그 인덱스를 저장해야한다.

S = input()
array = [-1] * 26

for i in range(len(S)):
    if array[ord(S[i])- 97] != -1 :
        continue
    else : array[ord(S[i])- 97] = i 
        
for i in range(26):
    print(array[i],end=' ')

baekjoon
[1, 0, -1, -1, 2, -1, -1, -1, -1, 4, 3, -1, -1, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]

 

 

2. 곱하기 or 나누기

Q. 다음과 같이 0 혹은 양의 정수로만 이루어진 배열이 있을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 '✕' 혹은 '+' 연산자를 넣어 결과적으로 가장 큰 수를 구하는 프로그램을 작성하시오.
단, '+' 보다 '✕' 를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서 순서대로 이루어진다.

 

def find_max_plus_or_multiply(array):
    plus_multi_sum = 0
    for i in array :
        if i <= 1 or plus_multi_sum <=1 :
            plus_multi_sum += i
        else:
            plus_multi_sum *= i
    return plus_multi_sum


result = find_max_plus_or_multiply
print("정답 = 728 현재 풀이 값 =", result([0,3,5,6,1,2,4]))
print("정답 = 8820 현재 풀이 값 =", result([3,2,1,5,9,7,4]))
print("정답 = 270 현재 풀이 값 =", result([1,1,1,3,3,2,5]))

 

 

3.반복되지 않는 문자 

Q. 다음과 같이 영어로 되어 있는 문자열이 있을 때, 이 문자열에서 반복되지 않는 첫번째 문자를 반환하시오.
만약 그런 문자가 없다면 _ 를 반환하시오.

"abadabac" # 반복되지 않는 문자는 d, c 가 있지만 "첫번째" 문자니까 d를 반환해주면 됩니다!

 

여기서 배열이 너무 헷갈려서 정리해 가는 시간

알파벳이 총 26개 이기 때문에 배열도 26개 생성
arr_index = ord(x)- ord('a')   #값이 0이 나올경우
alphabet_occurrence_array[arr_index] +=1
#alphabet_occurrence_array[0] 즉, 0번째 인덱스에 값 1이 증가한다. 


def find(x):
 find_array = [0] * 26
 
 for i in x:
 if not i.isalpha():
	continue
 arr_index = ord(i) - ord('a')
 find_array[arr_index] += 1
 
 return find_array

 

# 반복되지 않는 첫 번째 문자를 찾는 함수
def find_not_repeating_first_character(string):
    # 알파벳 빈도수 계산
    occurrence_array = find_alphabet_occurrence_array(string)

    # 문자열 순회하며 첫 번째로 반복되지 않는 문자 찾기
    for char in string:
        if not char.isalpha():
            continue
        arr_index = ord(char) - ord('a')
        if occurrence_array[arr_index] == 1:  # 빈도수가 1인 경우
            return char

    # 반복되지 않는 문자가 없을 경우
    return "_"

# 알파벳의 등장 횟수를 계산하는 함수
def find_alphabet_occurrence_array(string):
    alphabet_occurrence_array = [0] * 26  # a-z까지 26개의 배열 생성
    
    for char in string:
        if not char.isalpha():  # 알파벳이 아닌 문자는 무시
            continue
        arr_index = ord(char) - ord('a')  # 알파벳의 인덱스 계산
        alphabet_occurrence_array[arr_index] += 1
    return alphabet_occurrence_array

# 테스트
print("정답 = d 현재 풀이 값 =", find_not_repeating_first_character("abadabac"))
print("정답 = c 현재 풀이 값 =", find_not_repeating_first_character("aabbcddd"))
print("정답 = _ 현재 풀이 값 =", find_not_repeating_first_character("aaaaaaaa"))