여기서의 해답은 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, 최대 값 등)을 테스트하면 문제의 취약점을 더 잘 찾아낼 수 있다.
- 시간 복잡도 및 공간 복잡도 고려: 더 복잡한 문제를 풀 때는 알고리즘의 효율성도 고려해야 한다. 각 문제의 시간 복잡도와 공간 복잡도를 분석해보는 연습을 해보는 것도 나쁘지 않다.
- 자료 구조와 알고리즘 학습: 알고리즘과 자료 구조에 대한 이해가 깊어질수록, 문제를 해결하는 데 더 유리하다. 다양한 자료 구조(스택, 큐, 트리 등)와 알고리즘(정렬, 탐색 등)에 대한 학습을 지속적으로 해나가도록 하자.
- 코드 리뷰 및 커뮤니티 참여: 다른 사람의 코드를 리뷰하거나, 커뮤니티에 질문을 올려 피드백을 받는 것도 큰 도움이 된다. 코드 리뷰를 통해 다양한 접근 방식을 배우고, 다른 사람들의 문제 해결 방법을 참고할 수 있다.
- 꾸준한 연습: 결국 가장 중요한 것은 꾸준한 연습이다. 문제를 많이 풀어보면서 각 문제의 패턴을 인식하고, 이를 해결하는 다양한 방법을 학습하도록 하겠다.
'Coding Test (코딩 테스트)' 카테고리의 다른 글
코딩테스트 4일차(1)(2024.10.22) - 2문제 (1) | 2024.10.23 |
---|---|
코딩테스트 4일차(1)(2024.10.21) - 3문제 (1) | 2024.10.21 |
코딩테스트 3일차(1)(2024.10.20) - 6문제 (0) | 2024.10.20 |
코딩테스트 2일차(1)(2024.10.19) - 4 문제 (0) | 2024.10.19 |
코딩테스트 1일차(2024.10.18) - 2 문제 (2) | 2024.10.18 |