Cooper's devlog

[TIL] 2021.01.06 본문

TIL

[TIL] 2021.01.06

cooper_dev 2021. 1. 6. 18:03

[알고리즘 데이]

 오늘은 백준에 있는 알고리즘 문제를 풀었다. solved.ac에서 나온 단계만 보았을 때는 문제가 어렵지 않다. 하지만 막상 문제를 풀고나니 나도 모르게 껑충한 시간과 연속적인 오답을 확인하면서 다시 한번 섣불리 난이도만 보고 판단하지 말자는 다짐을 다시 했다.


[물병(1052)]

 

1052번: 물병

지민이는 N개의 물병을 가지고 있다. 각 물병에는 물을 무한대로 부을 수 있다. 처음에 모든 물병에는 물이 1리터씩 들어있다. 지민이는 이 물병을 또 다른 장소로 옮기려고 한다. 지민이는 한 번

www.acmicpc.net

그 중에 가장 기억에 남는 문제는 물병문제와 큰수 A+B 이었다. 처음 물병 문제를 접근할 때 물의 용량에 맞춰서 로직을 구성하려고 했는데 코드를 적어나가다보니 아닌 것 같아서 다른 방법으로 전향해 문제를 해결했다.

  1. 우선적으로 현재 물통(n)가 만들 수 있는 최소 물병의 수(bottles_min)를 구한다.
  2. 최소 물병의 수(bottles_min)를 요구하는 물병의 수(k)와 비교한다.
  3. 만약 조건을 만족한다면(bottles_min <= k), 결과를 반환한다.
  4. 만약 조건에 만족하지 못한다면(bottles_min > k), 물병을 추가해서 다시 한번 1번의 과정을 거친다.
  5. 결과를 반환한다.

 

말로써 로직을 구성을 할때는 괜찮았지만 실제 코드를 작성할 때는 막히는 부분이 많았다. 아직 그만큼 실력이 올라오지 못해서 그런 것 같아 더 열심히 해야 겠다.

 

(문제 링크)

 

pbg0205/algorithm_study

:triumph:알고리즘 문제 풀이 저장소:triumph:. Contribute to pbg0205/algorithm_study development by creating an account on GitHub.

github.com


[큰수 A + B(10757)]

 

10757번: 큰 수 A+B

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

그리고 큰수의 A+B의 경우, BIgInteger를 사용하지 말라는 요구사항이 있었다. 그런데 청개구리 심보가 발동해서BIgInteger로 해결을 하고 다시 문제를 풀었다😁. 어제 수업시간에 배웠던 내용을 토대로 carry와 sum을 이용해서 결과를 도출하도록 했다.

  1. 두 수를 String형태로 입력받는다.
  2. 두 수의 끝 인덱스를 기준으로 차례대로 참조하면서 carry와 sum값을 구한다.
  3. 이전 인덱스의 carry값이 true라면, 기존 sum + 1하여 자리수를 채운다.
  4. 그리고 가장 마지막 연산이 끝나는 시점에 carry = true 라면, 1을 추가해서 수를 완성한다. 

 

하지만 java.lang.ArrayIndexOutOfBoundsException이 발생하는 것을 보고 순간적으로 substring은 index를 20까지 밖에 참조를 못하는건가 하는 어처구니없는 생각을 했다ㅋㅋㅋ. 해프닝인지는 모르겠지만 Exception 확인을 제대로 하자는 경각심을 일깨워주었다.

 

 알고리즘을 풀다보면 푸는 과정에서의 고뇌와 고통이 오지만 막상 해결하면서 오는 희열감이 있다. 그리고 확실히 다시 한번 알게된 사실은 알고리즘으 정말 꾸준히 해야 한다는 것을 다시 한번 상기시켰다. 알고리즘 문제를 안푼지 대략 1달정도 되었는데 정말 하나도 기억이 나질 않는 것을 보고 다시 한번 깨달았다.

 

(문제링크)

 

pbg0205/algorithm_study

:triumph:알고리즘 문제 풀이 저장소:triumph:. Contribute to pbg0205/algorithm_study development by creating an account on GitHub.

github.com


[TIL]

 오늘은 알고리즘 데이인 만큼 알고리즘 문제 한문제를 더 해결 해야겠다. 그리고 어제 제대로 숙지하지 못한 Roach의 자료를 다시 한번 보면서 CS공부를 추가적으로 할 예정이다.

 

 


+추가

 [잃어버린 괄호(1541)]

 처음에는 잃어버린 괄호라는 문제를 보고 이전에 풀었던 괄호문제가 생각이 났다. 그 당시 괄호 문제는 스택을 이용해서 문제를 해결하는 문제였다. 그런데 기존 스택으로 접근하는 문제와는 사뭇 달랐다. 괄호를 적당히 쳐서 연산의 값이 최소가 되도록 하는 문제다. 문제에서 가장 핵심적인 내용이 적당히였다. 적당히 괄호를 치라는 내용은 괄호를 1개 이상 해도 괜찮다는 이야기이다. 그렇다면 문제는 쉬워진다. (-) 부호가 있는 부분부터 (+)가 있는 끝부분까지 괄호를 치면 되기 때문이다. 이 컨셉을 가지고 문제를 접근했더니 그렇게 어렵지 않게 해결할 수 있었다.

 

 알고리즘 문제는 확실히 문제의 포인트를 잘찾아야 접근이 수월해지는 것을 깨달았다. 오늘은 운이 좋게 문제 컨셉을 잘 캐치하여 한문제를 서비스로 받은 느낌이라 기분이 좋다. 앞으로도 알고리즘을 꾸준히 풀어야 겠다.🐱‍👤

 

(문제 링크)

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

(문제 풀이)

 

pbg0205/algorithm_study

:triumph:알고리즘 문제 풀이 저장소:triumph:. Contribute to pbg0205/algorithm_study development by creating an account on GitHub.

github.com

 

'TIL' 카테고리의 다른 글

[TIL]2021.01.11  (0) 2021.01.12
[TIL] 2020.01.08  (0) 2021.01.09
[TIL] 2020.01.07  (0) 2021.01.08
[TIL] 2021.01.05  (0) 2021.01.05
[TIL] 2021.01.04  (0) 2021.01.04
Comments