[Python] SWEA D3 최대 상금

·2024년 9월 13일

알고리즘 스터디

목록 보기
9/26

처음 풀이

T = int(input()) # 전체 테스트 케이스 수

def function(a, b):
    # 일단 리스트에 넣어
    line = list(map(int, str(a)))
    count = 0

    for i in range(len(line)):
        if count >= b:
            break
        mx = max(line[i:])
        if line[i] != mx:
            max_idx = line.index(mx,i)
            line[i], line[max_idx] = line[max_idx], line[i]
            count += 1
    return ''.join(map(str, line))


for test_case in range(T):
    a, b = map(int, input().split())
    result = function(a, b)
    print(f"#{test_case + 1} {result}")
  • 가장 큰 값을 구해서 line2 리스트에 하나씩 넣어주고 바뀐 애들은 line에 둬서 둘을 합쳐서 출력해주는 방법 (max 값으로 가장 앞에 설정해둔 게 다른 인덱스로 계속 바뀌는 걸 못하게 하려고...)
  • 사실 풀면서도 알았는데 이렇게 풀면 예시 그림에 있는 교환하고 다시 교환하는 경우 (94 2) 에러가 난다 line 리스트가 비기 때문에,,,, 그럼 어떻게 풀까 고민했다

근데 어차피 시간초과 날 거 같아서 다른 방법으로 풀어야겠다...

수정했는데 이제는 0개가 맞았대

T = int(input())  # 테스트 케이스의 수
for test_case in range(1, T + 1):

    N = int(input())

    def function(a, b):
        line = list(map(int, str(a)))
        n = len(line)
        b = min(b, n - 1)  # 실제 교환할 수 있는 최대 횟수로 조정

        for count in range(b):
            # 최댓값 찾기
            mx = max(line[count:])
            mix = line[count:].index(mx) + count

            if line[count] != mx:
                # 현재 위치와 최댓값이 다르면 교환
                line[count], line[mix] = line[mix], line[count]

        return ''.join(map(str, line))

    for i in range(N):
        a, b = map(int, input().split())
        result = function(a, b)
        print(f"#{i + 1} {result}")
def swap_max_value(num_str, k):
    num_list = list(num_str)  # 숫자 문자열을 리스트로 변환
    n = len(num_list)

    for _ in range(k):
        i = 0
        while i < n - 1:
            max_pos = i
            # i 이후에서 최대값 찾기
            for j in range(i + 1, n):
                if num_list[j] > num_list[max_pos]:
                    max_pos = j
            # 최대값이 현재 위치와 다르면 교환
            if max_pos != i:
                num_list[i], num_list[max_pos] = num_list[max_pos], num_list[i]
            i += 1

    return ''.join(num_list)  # 리스트를 문자열로 변환하여 반환


T = int(input().strip())  # 테스트 케이스 수 입력
for t in range(1, T + 1):
    num_str, k = input().split()  # 숫자 문자열과 교환 횟수 입력
    k = int(k)  # 교환 횟수 정수로 변환
    result = swap_max_value(num_str, k)  # 최대값 계산
    print(f"#{t} {result}")  # 결과 출력

오답
채점용 input 파일로 채점한 결과 fail 입니다.
(오답 : 15개의 테스트케이스 중 9개가 맞았습니다.)

profile
꾸준히 공부하기

0개의 댓글