카테고리 없음

실습 문제 풀이 3 (오답 정리) - SWEA 1288, 1926, 1976, 1989

김디니 2022. 7. 21. 22:12

1288

1번 양부터 N의 배수 번호인 양을 센다.

첫 번째는 N번의 양, 두 번째는 2N번 양, k 번째는 kN번의 양을 센다.

첫 번째부터 k번까지 셌던 번호들의 각 자리수에서 0 ~ 9까지의 숫자를 보는 것은 최소 몇 번의 양을 셀 때일까?

나의 오답

  1. while문이 아닌 for문을 사용한 것
  2. 문자열로 형변환을 생각했지만 계속해서 리스트를 사용하는 것에 머물러 있었던 것
  3. 계산된 정수를 분할하여 0 ~ 9까지 체크하며 제대로 담는 방법을 몰랐음

모범 답안

  1. 숫자를 문자로, 문자를 숫자로 변환한다. (숫자 → 문자 → 숫자)
  2. 모든 수(0 -9)가 포함될 때까지 반복한다. (while문을 사용한다(될 때 까지 반복해야하므로)
  3. 모든 수의 체크 방법
    1. 리스트(0 - 9)에 기록되지 않는 수가 없을 때 까지 (0이 없을 때 까지)
    2. 리스트에 중복 제거(set())을 사용하여 set의 길이가 10이 될 때 까지 (알아서 중복 제거가 되므로 10이 되면 0 - 9 리스트를 완성)
    3. 정수를 문자열로 분할한다.
t = int(input())
for test_case in range(1, t + 1):
    N = int(input())
    N1 = N 
    numbers = set() # 기록지 
    # while 반복 => set 길이가 10이 될 때 까지 
    while True:
        # for 반복: 숫자를 문자로 변환 
        for n in str(N):
            # numbers set에 추가 
            numbers.add(n)
        if len(numbers) == 10:
            break
        # print(n, numbers)
        N += N1
    print(f'#{test_case} {N}')

1926

3 - 6 - 9 게임

'3', '6', '9' 가 들어간 숫자는 '-'로 표시한다.

(33이나 36은 '--'로 표시하도록 한다)

나의 오답

  1. 문자열로 변환하였고 출력도 잘했지만, 13과 같은 숫자는 인식하지 못하고 '-' 를 출력하지 못하였음
n = int(input())
clap = ['3', '6', '9']

for i in range(1, n + 1):
    i = str(i)
    if i in clap:
        print('-', end = ' ')
    else:
        print(i, end = ' ')
        continue

모범 답안

  1. count()를 사용하여 13과 같은 정수를 인식하도록 한다.
n = int(input())
for i in range(1, n + 1):
    i = str(i)
    c = i.count('3') + i.count('6') + i.count('9')

    if c == 0:
        print(i, end=' ')
    else:
        print('-' * c, end=' ')

1976

시 분으로 이루어진 시각을 2개 입력 받아, 더한 값을 시 분으로 출력하는 프로그램을 작성하라.

(시각은 12시간제로 표시한다. 즉, 시가 가질 수 있는 값은 1시부터 12시이다.)

t = int(input())
for test_case in range(1, t + 1):


    h1, m1, h2, m2 = map(int, input().split())
    result1 = h1 + h2            
    result2 = m1 + m2
    if result1 > 12:
            result1 -=  12
    if result2 > 59:
            result1 += 1
            result2 -= 60

    print('#{} {} {}'.format(test_case, result1, result2))

더한 값 (result1, 2)은 각각 12와 59를 넘지 못한다. (시각을 표현하기 위해)

그러므로 12가 넘는다면 12를 빼준다. 만약 13시라면 12를 빼주어 1시를 표현하도록 한다.

1989

회문 검사

거꾸로 읽어도 제대로 읽은 것과 같은 문장과 낱말인 회문을 출력한다.

입력 받아 회문이면 1을, 아니면 0을 출력한다.

t = int(input())
for test_case in range(1, t + 1):

    word = input()
    result = ''
    
    for i in range(len(word)-1, -1, -1):
        result += word[i]

    if result == word:
        print('#{} {}'.format(test_case, '1'))
    else:
        print('#{} {}'.format(test_case, '0'))

range 역순을 이용한다. 

실습 오답 원인

  1. 형 변환 (정수 → 문자열)
  2. while문 사용 접근법