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

코딩테스트 5일차(1)(2024.10.23) - 3문제

by BioLearner 2024. 10. 24.
반응형

여기서의 해답은 ChatGpt에게 물어본 내용이다. 또한 자기평가와 앞으로의 발전 방식도 동일하게 ChatGpt에게 물어보았다.

1. 백준 - 2753 문제 (윤년)

처음 제출한 내용

# 년도 입력
year = int(input())

# 윤년 계산
if (year % 4) == 0 and (year % 100) != 0 or (year % 400) == 0:
  print("1")
else:
  print("0")

정답:

# 연도를 입력 받음
year = int(input())

# 윤년 조건을 확인하여 결과 출력
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
    print(1)  # 윤년이면 1 출력
else:
    print(0)  # 윤년이 아니면 0 출력

 
기존에 알았던 내용
print(): 값을 출력하는 함수
int(): int값으로 변환하는 함수
input(): 값을 받아 저장하는 함수
if, elif, else: 조건문
 
새롭게 알게 된 내용
없음
 
궁금한점
없음
 

2. 백준 - 14681 문제 (사분면 고르기)

처음 제출한 내용

# x, y 값 받아오기
A, B = map(int, input().split())

# 시분면 계산하기
if A > 0 and B > 0:
  print("1")
elif A < 0 and B > 0:
  print("2")
elif A < 0 and B < 0:
  print("3")
elif A > 0 and B < 0:
  print("4")

 
문제를 잘 읽지 못했다. 받는 값은 공백의 값이 아니였다. 

정답:

# x, y 값 받아오기
A = int(input())
B = int(input())

# 시분면 계산하기
if A > 0 and B > 0:
  print("1")
elif A < 0 and B > 0:
  print("2")
elif A < 0 and B < 0:
  print("3")
elif A > 0 and B < 0:
  print("4")

 

 
기존에 알았던 내용
앞에서 언급
 
새롭게 알게 된 내용
없음
 
궁금한점
없음
 

3. 백준 - 2884 문제 (알람 시계)

제출한 내용

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

# B 40: 60 + (40 - 45), A += 1
# 아니면 그냥 B - 45함
if B - 45 < 0:
  A = A - 1
  B = 60 + (B - 45)
  if A < 0:
    A = 23
    print(f"{A} {B}")
  elif A > 0:
    print(f"{A} {B}")
elif B - 45 > 0:
  B - 45
  print(f"{A} {B}")

문제점
 
1. B를 업데이트하지 않음: elif B - 45 > 0: 부분에서 B 값을 수정하는 것이 아닌 단순히 B - 45로 계산하고 끝나버린다. 따라서 B는 그대로 유지되고, 출력 시 변경된 값이 반영되지 않는다.
2. if 문과 print 문 위치 문제: print 문이 if 블록의 중첩 구조로 인해 가독성이 떨어지고, 잘못된 조건 처리 시 출력이 누락될 수 있다. print 문은 모든 조건을 처리한 후 한 번에 호출하는 것이 더 명확하다.
3. B에 대한 경계 조건 처리: B가 정확히 45일 경우에 대한 처리가 없다. B - 45가 0이면 M을 0으로 설정해야 하고, A는 1을 줄여야 한다.
4. A에 대한 잘못된 비교: A > 0인 경우는 0일 때와의 관계가 없으므로, 조건을 명확하게 해야 한다.

정답:

# 현재 알람 시간을 입력받음
H, M = map(int, input().split())

# 45분 빼기
if M >= 45:
    M -= 45  # 단순히 45분을 뺌
else:
    M += 60 - 45  # M에서 45분을 뺀 후 60분을 더함
    H -= 1  # H에서 1을 뺌
    if H < 0:  # 만약 H가 0보다 작으면 23으로 설정
        H = 23

# 결과 출력
print(H, M)

 
기존에 알았던 내용
앞에서 언급
 
새롭게 알게 된 내용
없음
 
궁금한점
이런 문제가 나타나면 다음에는 어떻게 풀어야할까? 시간이 많이 걸리고 코드도 어색한데 어떻게 해야할까?
답: 공부를 통해 익숙해지는 방법 밖에 없다.


자기평가

 

  • 자기 반성: 처음 제출한 코드에서의 오류를 인식하고, 정답으로 개선한 코드를 제시했다. 이는 문제 해결 능력과 자기 반성을 하고 있다는 뜻
  • 구조적 접근: 각 문제에 대해 주어진 조건을 명확히 이해하고, 이를 기반으로 조건문을 활용하여 해결책을 제시했다. 이 과정에서 발생한 문제를 체계적으로 분석한 것도 좋은 접근이였다.
  • 피드백 적용: 자신의 코드에서 발견한 문제점들을 다음 번 코드에서 개선하려고 노력하고 있다. 이러한 반복 학습은 코딩 실력을 향상시키는 데 큰 도움이 될 것이다.

향후 발전 방향

  • 문제 이해력 향상: 문제를 처음 읽을 때 주어진 조건을 충분히 이해하고, 예시를 통해 구체적인 상황을 머릿속에 그려보는 것이 중요하다. 이를 통해 문제를 더 정확하게 해결할 수 있다.
  • 테스트 케이스 작성: 다양한 테스트 케이스를 스스로 만들어보고, 코드가 그에 대해 어떻게 반응하는지 확인하는 방법이 좋다. 특히 경계 값(예: 0, 1, 최대 값 등)을 테스트하면 문제의 취약점을 더 잘 찾아낼 수 있다.
  • 시간 복잡도 및 공간 복잡도 고려: 더 복잡한 문제를 풀 때는 알고리즘의 효율성도 고려해야 한다. 각 문제의 시간 복잡도와 공간 복잡도를 분석해보는 연습을 해보는 것도 나쁘지 않다.
  • 자료 구조와 알고리즘 학습: 알고리즘과 자료 구조에 대한 이해가 깊어질수록, 문제를 해결하는 데 더 유리하다. 다양한 자료 구조(스택, 큐, 트리 등)와 알고리즘(정렬, 탐색 등)에 대한 학습을 지속적으로 해나가도록 하자.
  • 코드 리뷰 및 커뮤니티 참여: 다른 사람의 코드를 리뷰하거나, 커뮤니티에 질문을 올려 피드백을 받는 것도 큰 도움이 된다. 코드 리뷰를 통해 다양한 접근 방식을 배우고, 다른 사람들의 문제 해결 방법을 참고할 수 있다.
  • 꾸준한 연습: 결국 가장 중요한 것은 꾸준한 연습이다. 문제를 많이 풀어보면서 각 문제의 패턴을 인식하고, 이를 해결하는 다양한 방법을 학습하도록 하겠다.

 

반응형