My Dream Being Visualized

Day 5: 백준 [8단계] 기본 수학 1 - 분수찾기 본문

Programming/Algorithm

Day 5: 백준 [8단계] 기본 수학 1 - 분수찾기

마틴킴 2021. 4. 11. 05:26
728x90

[결과]

첫번 째는 문제를 이해를 잘못해서 다른 방식으로 풀었음 // 두번 째는 모든 counter를 일일이 순회 // 세번 째는 해당 counter 범위 내에서 일일이 순회 후 답을 찾음

 

[코드]

시간 초과된 코드
맞은 코드!

 

[과정]

1. 문제를 제대로 읽지 않았음. '지그재그' 라는 단어가 명시되어 있었으나 문제를 내 마음대로 이해하고 다른 문제를 풀었음

2. 시간초과된 코드는, 모든 분수를 일일이 순회했음

3. 맞은 코드는, 지그재그(=분모 분자가 swapped)를 나타내는 is_even변수, 해당 단계단 분수 갯수를 나타내는 phase변수, 각 단계의 모든 합을 나타내는 _all변수(일일이 순회하지 않기 위한 설정), number의 범위에 해당하는 phase를 찾은 후 phase 안에서 1씩 더하며 해당 number와 동일할 경우 is_even변수 값의 상태에 따라 분수 출력!

 

[공부]

1. 범위를 지정할 때 '숫자 < 범위 < 숫자' 같은 형태로 적어도 된다. (이전에 판다스에서는 2개로 나눴어야 했던 거 같은데 아닌가..?)

2. bool 변수를 매번 바꾸기 위해서 not '논리연산자' 사용 가능

 

[문제]

www.acmicpc.net/problem/1193

 

1193번: 분수찾기

첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.

www.acmicpc.net

 

[선배 개발자들의 코드 분석]

코드가 왜 이렇게 짧은지..... 참

1) 나는 1, 2, 3, 4... 단계별로 더해갔는데, 위 선배 개발자님은 입력변수에서 값을 빼나갔음

2) 단계별로 빼다가, n-k+1이 차이값

3) 2로 나눈 나머지가 1일 때 스왑, 나는 is_even이라는 변수를 뒀었음

>> 확실히 간단하고 더 수학적으로 코딩하신 것 같다. 내껀 복잡해보임.. 

 

[느낀점]

1. 문제를 제대로 이해하고 예제까지 꼼꼼히 검토 후 설계, 코딩하자. >> 꼼꼼히 살피자

2. 도저히 공통점을 찾을 수 없어 일일이 순회하는 코드를 만들었다가 짜증만 나고 답을 보려다가 참고 계속 했더니 뿌듯함이 컸다. 이렇게 쉬운 문제를 두고 고민한다는 내가 싫다. >> 실력 부족함이 느껴짐

3. 막상 메모장에 예시를 적어보니 공통점이 보였었다. >> 분석력이 떨어짐

 

Steady wins the race I believe!