오늘 한 일 👩💻
- 알고리즘(프로그래머스 - 달리기 경주)
- 권영진 교수님 OS 강의(2)
- Pintos 과제 (validate_address, exit, create ...)
알고리즘
https://school.programmers.co.kr/learn/courses/30/lessons/178871
앞으로 매일 프로그래머스에서 꾸준히 한 문제씩 풀 예정이다.
오늘 푼 문제는 lv1이었지만, map 자료 구조를 떠올릴 수 있었다.
첫번째 시도는 이중 for문을 사용하여 교체되어야하는 index를 찾은 것이었는데 이럴 경우 특정 테스트 케이스에서 시간초과가 발생했다.
따라서 처음부터 map 자료형을 사용하여, 저장된 index 값을 함께 저장하였다.
오랜만에 사용하니 잘 기억이 나지 않는데 조만간 정리가 필요할 것 같다.
https://www.acmicpc.net/problem/2870
(이전에 풀이한 문제)
문자열 문제이다.
문자를 숫자로 변환하는 작업이 필요한데 이때 NumberFormatException을 주의해야 한다.
백준에서는 NumberFormatException이 다음의 경우에 사용된다고 한다.
- 입력이 올바르지 않을 때 -> input: 1 2 (공백으로 입력값이 구분되어 들어올 때)
- 결과가 범위 밖에 있을 때 -> 123456789123는 2^31-1보다 커서 Integer의 범위를 벗어나기 때문에, java.lang.NumberFormatException이 발생한다.
- null을 Integer로 변환하려고 할 때
BigInteger를 사용하는 방법은 다음 글을 참고하자!
https://coding-factory.tistory.com/604
int와 long으로도 표현되지 않을 때, BigInteger는 문자열 형태로 이루어져 있어 숫자의 범위가 무한해 어떤 숫자든 담을 수 있다.
BigInteger bigNumber = new BigInteger("100000");
- java.math 안에서 선언한다.
- BigInteger를 초기화할 때 문자열을 인자값으로 넘겨줘야 한다.
권영진 교수님 OS 강의 - 2회차
1회차와 함께 정리하고 있는 중이다.
이번 주차에는 전반적인 Pintos 과제 설명과 protection&isolation, sharing resource 부분을 들었다.
교수님의 강의는 개별적인 것보다 전체적으로 OS가 어떻게 이어져있는지 이해할 수 있었고, 지금 내가 어느 지점에 와있고 어떤 부분을 더 공부해야할지 생각할 수 있었다.
느낀 점은 pintos 과제를 하면서 운영체제에 대한 전체적인 흐름은 어느정도 정리가 되는 것 같은데 아직 디테일한 부분이 많이 부족하다는 점이다.
교수님의 강의를 정리하면서 디테일한 부분을 보완하고, 정리한 후에 전체적인 그림을 그려볼 예정이다.
Pintos
validate_address, exit, create ...
pintos 과제 중이다.
https://github.com/Blue-club/pintos_5/issues/17 -> 자세한 과제 진행 상황은 github issue 참고...
저번주차에 팀원과 소통이 적었던 점이 아쉬워서 이번에는 최대한 대화를 많이 하고 있다.
팀원과 나 모두 깊게 파는 것을 좋아해서 깊게 파다보면, 그 과정에서 배울 것이 많다.
다만 시간이 너무 많이 걸린다는 것이 함정...🚨
적당한 선을 찾는게 필요하다.
또 진행상황이라면, 최대한 직접 구현하는 방식으로 하고 있는데 그 이유는 스스로 구현력이 약하다고 생각하기 때문이다.
코드를 작성하는게 두렵다고 해야하나? 어차피 내가 작성하는 코드는 동작하지 않으면 다 똥💩인데 말이다~
그리고 다시 작성하면 되는 걸~
그래서 이번에는 최대한 직접 구현하면서 부딪혀 보려고 한다. 물론 역시나! 시간이 많이 걸린다는게 단점인데 그래도 옛날이라면 상상하지 못했을 것이다ㅎㅎ
🌳 함께 자라기
더 빨리 자라고 싶다면 다음을 고민해라.
- 어떻게 이율을 높일 것인가
- 지속적으로 현명한 투자를 하는 방법은 무엇인가
⇒ 지식이나 능력은 복리로 이자가 붙는다.
더하기 사고보다 곱하기 사고를 하자.
- 더하기 사고: 가용시간을 늘리고, 쓸데없이 낭비되는 시간을 줄이고, 잠자는 시간을 줄이는 것
- 곱하기적 사고: 집단의 지능을 높이는 것 ⇒ 모든 지적 활동의 효율이 좋아지기 때문에 전반적인 개선이 일어나 개선 작업을 더 잘하게 된다.
=> 어떻게 하면 더하기보다 곱하기 시간을 늘릴 것인가?
=> 어떻게 해야 곱하는 비율(이자율)을 높일 수 있는가 혹인 이자 적용 주기를 짧게 할 수 있는가?
책에서는 다음의 방법을 제안한다.
- 자신이 이미 갖고 있는 것을 잘 활용하라.
- 이미 갖고 있는 것은 잘 연결할 것 → 이미 습득한 지식, 기술, 경험 등을 서로 연결 지어서 시너지 효과가 나게 하고 하나의 영역에서 다른 영역으로 오고가는 것을 자주해서 다른 영역 간을 넘나들기 수월하게 해라.
- 현재 내가 하는 일이 차후에 밑거름이 되도록!
- 외부 물질을 체화하라.
- 외부의 것이 들어오고 생긴 내부의 갈등을 해결하는데 집중해라.
- 자신을 개선하는 프로세스에 대해 생각해 보라.
- 회고해라.
- 개선하는 과정을 어떻게 하면 개선할 수 있을지 고민해라.
- 피드백을 자주 받아라.
- 사이클 타임을 줄여라.
- 일찍, 그리고 자주 실패하고, 실패에서 학습해라.
- 자신의 능력을 높여주는 도구와 환경을 점진적으로 만들어라.
- 완벽한 도구와 환경을 갖추는 데 집착하지 말라.
학습 프레임 vs 실행 프레임
- 실행 프레임은 현재 주어진 과업이 좋은 성과를 내는 것으로 생각하는 틀을 말한다.
- 학습 프레임은 현재 주어진 과업이 내가 얼마나 배우느냐로 여기게 되는 틀을 말한다.
⇒ 현재 하고 있는 주어진 과정을 학습 프레임이라고 생각하자!
내일 할 일 📝
- 알고리즘 문제 풀이
- pintos 과제 수행
- pintos 공부 내역 정리