[SWEA] D3 문제 풀이 - 2

kiteB·2022년 6월 4일
0

SWEA

목록 보기
5/6
post-thumbnail

📌 승률 비교하기 (3975)

🔗 문제 링크

T = int(input())
answer = []

for _ in range(T):
    a, b, c, d = map(int, input().split())
    alice = a / b * 100
    bob = c / d * 100
    result = ''

    if alice > bob:
        result += "ALICE"
    elif alice < bob:
        result += "BOB"
    else:
        result += "DRAW"

    answer.append(result)

for i in range(T):
    print(f"#{i + 1} {answer[i]}")

📌 영준이의 카드 카운팅 (4047)

🔗 문제 링크

T = int(input())

for test_case in range(1, T + 1):
    cards = {'S': [], 'D': [], 'H': [], 'C': []}
    current = input()
    flag = True

    for i in range(0, len(current), 3):
        card = current[i:i + 3]
        cards[card[0]].append(int(card[1:]))

    for i in cards:
        if cards[i] != list(set(cards[i])):
            flag = False

    print(f"#{test_case}", end=' ')
    if not flag:
        print("ERROR")
    else:
        for i in cards:
            print(13 - len(cards[i]), end=' ')
        print()
  • 무늬(S, D, H, C)별로 가지고 있는 카드 숫자를 cards에 저장한다.
  • 만약 중복이 있다면 flagFalse로 변경하여 "ERROR"를 출력한다.
  • 중복이 없다면 각 무늬별로 13 - 카드의 개수를 한 값을 출력한다.

📌 태혁이의 사랑은 타이밍 (4299)

🔗 문제 링크

T = int(input())

for test_case in range(1, T + 1):
    d, h, m = map(int, input().split())
    day = d - 11
    hour = h - 11
    minute = m - 11

    if minute < 0:
        hour -= 1
        minute += 60

    if hour < 0:
        day -= 1
        hour += 24

    if day >= 0:
        print(f"#{test_case} {day * 24 * 60 + hour * 60 + minute}")
    else:
        print(f"#{test_case} -1")

📌 모음이 보이지 않는 사람 (4406)

🔗 문제 링크

T = int(input())

for test_case in range(1, T + 1):
    word = input()
    answer = ''

    for w in word:
        if w not in ['a', 'e', 'i', 'o', 'u']:
            answer += w

    print(f"#{test_case} {answer}")
  • 모음이 아닌(즉, 자음인) 경우에만 answer에 더해서 출력한다.

📌 최대 성적표 만들기 (4466)

🔗 문제 링크

T = int(input())

for test_case in range(1, T + 1):
    n, k = map(int, input().split())
    scores = list(map(int, input().split()))
    scores.sort(reverse=True)
    answer = 0

    for i in range(k):
        answer += scores[i]

    print(f"#{test_case} {answer}")
  • 점수를 내림차순으로 정렬하여 앞에서부터 k개만큼의 점수만 더한다.

📌 늘어지는 소리 만들기 (4676)

🔗 문제 링크

T = int(input())

for test_case in range(1, T + 1):
    s = input()
    hyphen = int(input())
    position = list(map(int, input().split()))

    new = [[] for _ in range(len(s) + 1)]
    for i in range(len(s)):
        new[i + 1].append(s[i])

    for p in position:
        new[p].append('-')

    answer = ''
    for i in new:
        answer += ''.join(map(str, i))

    print(f"#{test_case} {answer}")
  • 💡하이픈 삽입 위치는 맨 처음 문자열만을 기준으로 한다.
    • Ex) 문자열이 wow, 하이픈 삽입 위치가 2, 3, 2로 주어진 경우, 하이픈을 모두 삽입하고 난 뒤의 문자열은 wo--w-가 된다.
  • 매 위치마다 문자열에 바로 하이픈을 붙이는 방법을 사용하려면 원래 문자열 요소의 위치를 모두 기억하고 있어야 하기 때문에 리스트 new를 따로 만들어서 이용해서 풀었다.
    • 나중에 하이픈 삽입 위치를 인덱스 조작 없이 편하게 접근하기 위해서 리스트 않에 문자열의 길이 + 1개의 리스트를 선언하였다.
    • Ex) 문자열이 wow인 경우 new[[], [], [], []]로 만들어주었다.
  • 원래 문자열에서 문자를 하나씩 꺼내서 new 리스트에 위치별로 삽입해주었다.
    • Ex) [[], ['w'], ['o'], ['w']]
  • 그 다음 삽입할 하이픈의 위치에 맞게 append() 메소드를 이용하여 하이픈을 추가해주었다.
    • Ex) [[], ['w'], ['o', '-', '-'], ['w', '-']]
  • 마지막으로 join()을 이용하여 문자열로 만들어서 출력하면 된다.

📌 두 가지 빵의 딜레마 (5162)

🔗 문제 링크

T = int(input())

for test_case in range(1, T + 1):
    a, b, c = map(int, input().split())
    answer = c // min(a, b)
    print(f"#{test_case} {answer}")
  • 최대한 많은 개수를 구매하려면 더 저렴한 빵만 구매하면 된다.

📌 민석이의 과제 체크하기 (5431)

🔗 문제 링크

T = int(input())

for test_case in range(1, T + 1):
    n, k = map(int, input().split())
    students = [0] * (n + 1)
    homework = list(map(int, input().split()))

    for h in homework:
        students[h] += 1

    print(f"#{test_case}", end=' ')
    for idx in range(1, n + 1):
        if students[idx] == 0:
            print(idx, end=' ')
    print()
  • 학생 번호만큼 students 리스트를 0으로 초기화해둔 뒤, 과제를 제출한 학생의 인덱스에 해당하는 students 값을 1로 만든다.
  • students 값을 검사하여 0 값을 갖는 학생 번호를 출력한다.

📌 홀수일까 짝수일까 (5549)

🔗 문제 링크

T = int(input())

for test_case in range(1, T + 1):
    n = int(input())
    if n % 2 == 0:
        print(f'#{test_case}', "Even")
    else:
        print(f'#{test_case}', "Odd")

📌 현주의 상자 바꾸기 (5789)

🔗 문제 링크

T = int(input())

for test_case in range(1, T + 1):
    n, q = map(int, input().split())
    answer = [0] * (n + 1)

    for i in range(1, q + 1):
        l, r = map(int, input().split())

        for j in range(l, r + 1):
            answer[j] = i

    print(f"#{test_case}", end=' ')
    print(*answer[1:])

📌 새샘이의 7-3-5 게임 (5948)

🔗 문제 링크

from itertools import combinations

T = int(input())

for test_case in range(1, T + 1):
    numbers = list(map(int, input().split()))
    answer = []

    for combi in list(combinations(numbers, 3)):
        answer.append(sum(combi))
    answer = sorted(set(answer), reverse=True)
    print(f"#{test_case} {answer[4]}")
  • combinations를 이용하여 세 개의 수로 이루어진 모든 조합을 구한 뒤, 각 조합들의 합을 answer에 추가한다.
  • set(answer)를 이용하여 중복을 제거한 뒤, 내림차순으로 정렬하여 다섯 번째로 큰 수를 구하기 위해 answer[4]를 출력한다.

📌 다솔이의 월급 상자 (6692)

🔗 문제 링크

T = int(input())

for test_case in range(1, T + 1):
    n = int(input())
    answer = 0

    for _ in range(n):
        p, x = input().split()
        answer += float(p) * int(x)

    print(f"#{test_case} {answer:.6f}")
profile
🚧 https://coji.tistory.com/ 🏠

0개의 댓글