Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- vocabulary
- Problem set 1.5
- 대학
- ODEs
- 공수 문제풀이
- 미분방정식
- Nonhomogeneous ODEs
- kreyszig
- 공수
- 공수1
- 미방
- 코딩테스트
- 백준
- 비제차 상미분 방정식
- 영어회화
- Python
- 공업수학
- Problem Set 1.4
- Conversation
- 공학수학
- 문제풀이
- 삼성SW역량테스트
- 맛집
- Advanced Engineering Mathematics
- homogeneous
- English
- SW역량테스트
- Homogeneous ODEs
- Ode
- Problem set 2.7
Archives
- Today
- Total
한걸음
백준 단계별로 풀어보기 (5) : 함수 본문
반응형
https://www.acmicpc.net/step/5
1. 함수 구현 순서, 사고 전개 방식
나는 프로그래밍에 있어서 함수 사용은 우리가 일상적인 대화를 서로 하는 것처럼 자연스러운 행동이어야 된다고 정의 내리고 싶다. 함수 활용을 잘할 수 있다면 내가 원하는 출력을 다양하고 간결하게 표현해낼 수 있기 때문이다. 그러므로 계속해서 연습할 수 있도록 하자.
또한, 단순히 함수를 구현할 수 있다고 해서 문제를 잘 풀 수 있는 것은 아니다. 결국 주어진 문제에 대해서 코드를 짤 때 적재적소에 함수를 갖다 놓을 수 있어야 한다. 그러므로, 문제를 구성하고 정리할 수 있는 습관도 필요하다. 문제를 해결할 때에는 가장 큰 숲에서 나무를 보는 방식으로 전개할 수 있도록 하자.
가령,
- 조사해야 하는 집단을 파악하고, 하나씩 조사를 한다.
- 조건(1, 2, ..., N)을 확인하고, 그에 맞는 response를 구하자.
- 각 조건 (1, 2, ..., N)에 대해서 위와 같은 방식으로 고려를 하자.
- 최종 답을 구한다.
와 같다.
어쩌면 계속해서 코딩 테스트에 낙방하는 것도 시간의 압박과 시험장에서의 적응이 느려서 그럴 수도 있겠지만, 사소하지만 필요한 작업이 제대로 이루어지지 않아서 그런 것 같기도 하다. 어쨌든, 계속해서 연습할 필요가 있다.
2. 문제 풀이
15596, 단순한 문제이므로 패스
https://www.acmicpc.net/problem/15596
4673 : 셀프 넘버
https://www.acmicpc.net/problem/4673
문제를 정리해보자.
- 10000 이하의 숫자에 대해서 하나씩 꺼내어 생성자가 있는지 판단한다.
- 생성자가 없다면 셀프 넘버이므로 출력을 한다.
- 생성자는 각 자리 숫자의 합을 구하여 판단할 수 있다.
- 이미 만들어진 숫자가 아니면 방문처리를 한다. 방문처리가 되어 있다면 넘어간다.
이 논리에 따른 코드는 다음과 같다.
visited = [False for _ in range(10001)]
def nonself():
for i in range(1, 10001) :
total = i
for elem in (str(i)) :
total += int(elem)
if total <= 10000 :
visited[total] = True
nonself()
for i in range(1, 10001):
if not visited[i] :
print(i)
1065 : 한수
https://www.acmicpc.net/problem/1065
문제를 정리해보자.
- 숫자의 간격이 등차수열을 만족하는 경우는 한수이므로 count 하자
- 숫자를 자릿수 단위로 분해를 해서 등차수열인지 확인하자
- 이때, 한 자릿수의 경우는 등차 수열이다. 공차가 0이기 때문이다.
이 논리 구조에 따른 코드는 다음과 같다.
def is_cond(n):
# 각 숫자의 간격을 조사하자
_list = list(map(int, str(n).strip()))
if len(_list) == 1 :
return True
else :
dist = _list[0] - _list[1]
for i in range(1, len(_list)-1):
if dist != _list[i] - _list[i + 1]:
return False
return True
N = int(input())
# 첫 번째로 짠 코드
cnt = 0
for i in range(1, N + 1):
if is_cond(i) : cnt += 1
print(cnt)
간단한 문제였지만, 천천히 생각해보기에는 좋은 문제였던 것 같다. 앞으로도 이렇게 연습할 수 있도록 하자!
반응형
'Coding Test' 카테고리의 다른 글
백준 15686 : 치킨 배달(파이썬) (1) | 2023.10.23 |
---|---|
백준 15685 : 드래곤 커브(파이썬) (1) | 2022.11.09 |
백준 1260 : DFS와 BFS (파이썬) (1) | 2022.11.05 |
백준 14891 : 톱니바퀴(파이썬) (0) | 2022.10.26 |
[221011] 백준 23289 : 온풍기 안녕! (0) | 2022.10.12 |