[Python 문제풀이] 11일차

2020. 7. 19. 11:0003. Resources/Python

728x90
반응형

Day_11

Intro

Q17. arrayChange

You are given an array of integers. On each move you are allowed to increase exactly one of its element by one. Find the minimal number of moves required to obtain a strictly increasing sequence from the input.

제출 코드

def arrayChange(inputArray):
    AddNum = 0

    for i in range(len(inputArray) -1):
        if inputArray[i] >= inputArray[i+1]:
            AddNum += inputArray[i] + 1 - inputArray[i+1]
            inputArray[i+1] = inputArray[i] + 1

    return AddNum

작성 흐름

# 테스트 케이스들
inputArray = [1, 1, 1]
inputArray = [3122, -645, 2616, 13213, -8069]
inputArray = [2, 3, 3, 5, 5, 5, 4, 12, 12, 10, 15]
inputArray = [22121, 42080, -51776, -28528, 39895, -50842, 25463, 46187, -29518,
42293, -25615, -47412, 24945, -2630, -12717, -23773, -47824, -7768, -23620,
-30270, -51644, 42829, 27609, -40734, 2142, 20285, 29665, -36557, -24074,
-11996, 30511, 17104, 4360, -41163, 6814, 959, 26613, -15121, -17355,
28424, -11305, 33175, -8585, 23649, -18428, 16770, 14095, 38766, -22425,
-45139, -5836, -28668, -15123, -35450, 41353, 11103, -29233, -51990, -14958,
45944, 20841, -34149, 34720, -51760, 23519, -46257, 40985, -32615, -43378,
14243, -24731, 1311, -4236, -24885, 41713, -45195, -14683, 47765, 26904,
-51741, 38051, 13429, 38189, -45812, -52474, 14936, 6582, -26313, 4692,
12313, -37502, -40673, 5799, 23264, 33617, -50938, 26268, -25548, -22353,
-15175, -21568, 18656, 19208, 20674, 41228, -42538, -45085, -32356, -39901,
-39585, -50690, 2859, -4079, 29823, 28849, -2142, -16613, 23378, 36363,
31780, -40379, 7489, -13324, -22377, 35661, -27141, -42727, 10122, -40385,
-19765, 33913, -10504, -4715, -18190, 41430, -19134, 32646, 25839, 783, 32941, -25142]

# 리턴해줄 값을 0으로 초기화
AddNum = 0

# 입력받은 행렬의 전체 길이 - 1 만큼 반복한다 (다음 값과 비교해야해서 -1 처리 해주는 것)
for i in range(len(inputArray)-1):
    # 만약 현재 값이 다음 값보다 큰 경우, 
    if inputArray[i] >= inputArray[i+1]:
        # 다음 값을 현재 값보다 1 크게 하기 위한 값을 저장한다.
        AddNum += inputArray[i] + 1 - inputArray[i+1]
        # 확인용 print 코드
        print("Index: {}, Diff: {}, Total: {}".format(i, inputArray[i] + 1 - inputArray[i+1], AddNum))
        # 다음 값을 현재 값보다 1 크게 해준다.
        inputArray[i+1] = inputArray[i] + 1

# 바뀐 배열의 결과 확인
print(inputArray)
# 출력해줄 값 확인
print(AddNum)

Q18. palindromeRearranging

Given a string, find out if its characters can be rearranged to form a palindrome.

제출 코드

def palindromeRearranging(inputString):
    setString = list(set(inputString))

    dict_alphabet = dict()

    # 각 문자별로 갯수 세기
    for i_set in range(len(setString)):
        temp_alphabet = setString[i_set]
        dict_alphabet[temp_alphabet] = 0

        for i_input in range(len(inputString)):

            if inputString[i_input] == temp_alphabet:
                dict_alphabet[temp_alphabet] += 1

    # 짝수인 경우
    count_odd = 0
    if (len(inputString) % 2) == 0 : 

        for i_set in range(len(setString)):
            temp_alphabet = setString[i_set]

            if (dict_alphabet[temp_alphabet] % 2) != 0:
                count_odd += 1

                if count_odd >= 1:
                    return False
        return True
    # 홀수인 경우
    else:

        for i_set in range(len(setString)):
            temp_alphabet = setString[i_set]

            if (dict_alphabet[temp_alphabet] % 2) != 0:
                count_odd += 1

                if count_odd >= 2:
                    return False
        return True

작성 흐름

inputString = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabc"
print(len(inputString))
# 문자의 길이 확인하기 => 짝수인지 홀수인지
# 짝수인 경우 => 모든 문자가 짝수개여야 한다.
# 홀수인 경우 => 한 문자까지는 홀수개가 가능하다.
# 문자의 종류 확인하기 
setString = list(set(inputString))
print(setString)

# 알파벳 별로 갯수를 세기 위해서 dictionary 선언
dict_alphabet = dict()

# 각 문자별로 갯수 세기
for i_set in range(len(setString)):
    temp_alphabet = setString[i_set]
    dict_alphabet[temp_alphabet] = 0

    for i_input in range(len(inputString)):

        if inputString[i_input] == temp_alphabet:
            dict_alphabet[temp_alphabet] += 1

print(dict_alphabet)

# 홀수 개수인 알파벳 개수 체크
count_odd = 0

# 짝수인 경우
if (len(inputString) % 2) == 0 : 
    for i_set in range(len(setString)):
        temp_alphabet = setString[i_set]

        if (dict_alphabet[temp_alphabet] % 2) != 0:
            count_odd += 1

            if count_odd >= 1:
                print("false")
                break
    print("true")

# 홀수인 경우
else:
    for i_set in range(len(setString)):
        temp_alphabet = setString[i_set]

        if (dict_alphabet[temp_alphabet] % 2) != 0:
            count_odd += 1

            if count_odd >= 2:
                print("false")
                break
    print("true")
반응형

'03. Resources > Python' 카테고리의 다른 글

[Python 문제풀이] 13일차  (0) 2020.07.21
[Python 문제풀이] 12일차  (0) 2020.07.20
[Python 문제풀이] 10일차  (0) 2020.07.18
[Python 문제풀이] 9일차  (0) 2020.07.17
[Python 문제풀이] 8일차  (0) 2020.07.16