본문 바로가기
Coding Test (코딩 테스트)

코딩테스트 3일차(1)(2024.10.20) - 6문제

by BioLearner 2024. 10. 20.
반응형

여기서 정답은 ChatGPT에게 물어봐서 찾아낸 답.

 

1. 백준 - 10926 문제 (??!)

처음 제출한 내용

A = input("")

if A == "joonas" or "baekjoon":
    print(A + "??!")

 

이상하게 이것도 맞음 처리가 되었다. 그러나 문제에 따른 올바른 코딩은 아니다.

정답:

# 아이디 입력 받기
A = input()

# 아이디 뒤에 "??!"를 붙여서 출력
print(A + "??!")

 

기존에 알았던 내용

input(): 사용자가 입력한 값을 프로그램에 전달하는 함수

print(): 값을 출력하는 함수

 

새롭게 알게 된 내용

없음

 

궁금한점

없음

 

2. 백준 - 18108 문제 (1998년생인 내가 태국에서는 2541년생?!)

 

처음 제출한 내용

y = int(input())

our_y = y - (2541 - 1998)

print(our_y)

정답:

# 불기 연도 입력 받기
y = int(input())

# 서기 연도로 변환 (불기 연도에서 543 빼기)
converted_year = y - 543

# 결과 출력
print(converted_year)

 

기존에 알았던 내용

윗 내용과 동일

 

새롭게 알게 된 내용

없음

 

궁금한점

없음

 

3. 백준 - 10430 문제 (나머지)

처음 제출한 내용

A, B, C = map(int, input().split())

print((A+B)%C)
print(((A%C) + (B%C))%C)
print((A*B)%C)
print(((A%C) * (B%C))%C)

정답:

# A, B, C 입력 받기
A, B, C = map(int, input().split())

# 1. (A + B) % C
result1 = (A + B) % C

# 2. ((A % C) + (B % C)) % C
result2 = ((A % C) + (B % C)) % C

# 3. (A * B) % C
result3 = (A * B) % C

# 4. ((A % C) * (B % C)) % C
result4 = ((A % C) * (B % C)) % C

# 결과 출력
print(result1)
print(result2)
print(result3)
print(result4)

 

기존에 알았던 내용

map(): 주어진 함수를 반복 가능한(iterable) 객체의 각 요소에 적용하여, 그 결과를 반환하는 함수

split(): 문자열을 특정 구분자를 기준으로 나누어 리스트로 반환하는 함수

 

새롭게 알게 된 내용

없음

 

궁금한점

없음

 

4. 백준 - 2588 문제 (곱셈)

처음 제출한 내용

A = int(input())
B = int(input())

b = []

for i in str(B):
    b.append(i)

print(A * int(b[2]))
print(A * int(b[1]))
print(A * int(b[0]))
print(A * B)

 

정답:

# 입력 받기
A = int(input())  # 첫 번째 세 자리 자연수
B = int(input())  # 두 번째 세 자리 자연수

# (3) 두 번째 수의 1의 자리와 첫 번째 수를 곱한 값
print(A * (B % 10))

# (4) 두 번째 수의 10의 자리와 첫 번째 수를 곱한 값
print(A * ((B // 10) % 10))

# (5) 두 번째 수의 100의 자리와 첫 번째 수를 곱한 값
print(A * (B // 100))

# (6) 두 수를 곱한 값
print(A * B)

 

기존에 알았던 내용

append(): 리스트의 끝에 새로운 요소를 추가하는 메서드

 

새롭게 알게 된 내용

없음

 

궁금한점

없음

 

5. 백준 - 11382 문제 (꼬마 정민)

처음 제출한 내용

A, B, C = map(int, input().split())

print(A+B+C)

 

정답:

# 입력 받기
A, B, C = map(int, input().split())

# 세 수의 합 계산
result = A + B + C

# 결과 출력
print(result)

 

기존에 알았던 내용

윗 내용에서 언급

 

새롭게 알게 된 내용

없음

 

궁금한점

없음

 

6. 백준 - 23971 문제 (ZOAC 4)

H, W, N, M = map(int, input().split())

max_rows = H // (N + 1) + 1
max_cols = W // (M + 1)

max_people = max_rows * max_cols

print(max_people)

문제 이해 및 접근

  1. 입력값:
    • W: 열의 수
    • H: 행의 수
    • N: 세로로 최소 비어야 할 칸 수
    • M: 가로로 최소 비어야 할 칸 수
  2. 출력:
    • 거리두기를 지키면서 강의실에 앉을 수 있는 최대 인원 수
  3. 격자 좌표:
    • 좌표 (i, j)에 앉은 경우, 다른 참가자는 다음과 같은 조건을 충족해야 한다:
      • |i1 - i| > N (세로)
      • |j1 - j| > M (가로)

계산 방법

  • H를 N+1로 나눈 몫(H // (N + 1))은 거리두기를 지키면서 앉을 수 있는 행의 수.
  • W를 M+1로 나눈 몫(W // (M + 1))은 거리두기를 지키면서 앉을 수 있는 열의 수.

이제 전체 수용 인원 수는 행 수 × 열 수로 계산.

 

# 입력 받기
H, W, N, M = map(int, input().split())

# 거리두기를 고려한 최대 수용 가능한 행과 열 수 계산
max_rows = (H - N) // (N + 1) + 1 if H > N else 0  # (N + 1) 단위로 나누기
max_cols = (W - M) // (M + 1) + 1 if W > M else 0  # (M + 1) 단위로 나누기

# 최대 수용 가능 인원 수
max_people = max_rows * max_cols

# 결과 출력
print(max_people)

 

거리두기 수칙에 대한 올바른 해석

  1. 거리두기 조건:
    • 각 참가자는 세로로 N칸 또는 가로로 M칸 이상 비워야 하므로, 이는 실제로 앉을 수 있는 자리와 비워야 할 자리의 조합을 고려해야 합니다.
    • 예를 들어, 한 참가자가 (i, j)에 앉으면, 그와 같은 행(i)에서 (i, j+1)부터 (i, j+M)까지는 앉을 수 없고, 같은 열(j)에서도 (i+1, j)부터 (i+N, j)까지는 앉을 수 없습니다.
  2. 최대 행 수 계산:
    • 최대 행 수를 계산할 때, H > N 조건은 매우 중요합니다. 이는 참가자가 앉을 수 있는 최소한의 행 수를 확인하기 위한 조건입니다.
    • 만약 H <= N이면, 강의실에 앉을 수 있는 참가자가 존재할 수 없으므로 결과적으로 수용할 수 있는 최대 인원 수는 0이 됩니다.
  3. 최대 열 수 계산:
    • 마찬가지로, 열 수를 계산할 때도 W > M 조건을 사용하여 열 수를 확인합니다.
    • W <= M인 경우, 한 열에 앉을 수 있는 참가자가 없기 때문에 결과는 0이 됩니다.

기존에 알았던 내용

윗 내용에서 언급

 

새롭게 알게 된 내용

없음

 

궁금한점

없음

 


 

자기 평가

  • 장점: 문제 해결 능력과 논리적 사고가 좋아진 것 같다. 특히 문제를 이해하고 해석하는 데 주의 깊어졌다. 또한, 다양한 입력 조건을 고려하는 점도 좋은 접근을 하고 있다.
  • 개선할 점: 코드의 가독성을 높이기 위해 주석을 좀 더 상세하게 달아두면 좋을 것 같다. 특히 다른 사람이나 미래의 나 자신이 이해하기 쉽게 설명하는 것이 중요하다.

다음에 하면 좋을 내용:

  1. 문제 풀이 연습: 다양한 알고리즘 문제를 풀어도록 할 예정. 특히 정렬, 탐색, 동적 프로그래밍 같은 주제에 도전해보는 것이 좋다고 한다.
  2. 코드 리뷰: 다른 사람의 코드를 보고 분석해보는 시간이 있으면 좋겠다. 여러 사람의 접근 방식을 배우는 것은 많은 도움이 될 것이다.
반응형