본문 바로가기
정글/TIL

[크래프톤 정글] 67일 - 동료학습의 즐거움!🙃

by 위대한초밥V 2023. 6. 10.
오늘 한 일 👩‍💻
- 알고리즘(프로그래머스 - 달리기 경주)
- 권영진 교수님 OS 강의(2)
- Pintos 과제 (validate_address, exit, create ...)

알고리즘

https://school.programmers.co.kr/learn/courses/30/lessons/178871

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

앞으로 매일 프로그래머스에서 꾸준히 한 문제씩 풀 예정이다. 

오늘 푼 문제는 lv1이었지만, map 자료 구조를 떠올릴 수 있었다.

 

첫번째 시도는 이중 for문을 사용하여 교체되어야하는 index를 찾은 것이었는데 이럴 경우 특정 테스트 케이스에서 시간초과가 발생했다. 

따라서 처음부터 map 자료형을 사용하여, 저장된 index 값을 함께 저장하였다. 

 

오랜만에 사용하니 잘 기억이 나지 않는데 조만간 정리가 필요할 것 같다.

 

https://www.acmicpc.net/problem/2870

 

2870번: 수학숙제

종이에서 찾은 숫자의 개수를 M이라고 하면, 출력은 M줄로 이루어져야 한다. 각 줄에는 종이에서 찾은 숫자를 하나씩 출력해야 한다. 이때, 비내림차순으로 출력해야 한다. 비내림차순은 내림차

www.acmicpc.net

(이전에 풀이한 문제)

문자열 문제이다.

문자를 숫자로 변환하는 작업이 필요한데 이때 NumberFormatException을 주의해야 한다.

 

백준에서는 NumberFormatException이 다음의 경우에 사용된다고 한다.

  • 입력이 올바르지 않을 때 -> input: 1 2 (공백으로 입력값이 구분되어 들어올 때)
  • 결과가 범위 밖에 있을 때 -> 123456789123는 2^31-1보다 커서 Integer의 범위를 벗어나기 때문에, java.lang.NumberFormatException이 발생한다.
  • null을 Integer로 변환하려고 할 때

BigInteger를 사용하는 방법은 다음 글을 참고하자!

https://coding-factory.tistory.com/604

 

[Java] 큰 숫자(정수) 다루기 BigInteger 사용법 & 예제 총정리

BigInteger를 사용해야 하는 이유 Type 범위 int -2,147,483,648 ~ 2,147,483,647 long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 int는 메모리 크기는 4byte로 표현할 수 있는 범위는 -2,147,483,648 ~ 2,147,483,647이고 long

coding-factory.tistory.com

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 참고...

 

[Project 2-3] System Calls and Handlers(mywnajsldkf) · Issue #17 · Blue-club/pintos_5

System Calls and Handlers ✍️ 과제 미션 시스템 호출 argument로 제공된 주소를 확인한다. 다음 상황을 확인한다. (exit(-1)) 포인터가 가리키는 주소가 사용자 영역인가 user stack에 있는 인자들을 커널로

github.com

저번주차에 팀원과 소통이 적었던 점이 아쉬워서 이번에는 최대한 대화를 많이 하고 있다.

팀원과 나 모두 깊게 파는 것을 좋아해서 깊게 파다보면, 그 과정에서 배울 것이 많다.

다만 시간이 너무 많이 걸린다는 것이 함정...🚨

 

적당한 선을 찾는게 필요하다. 

 

또 진행상황이라면, 최대한 직접 구현하는 방식으로 하고 있는데 그 이유는 스스로 구현력이 약하다고 생각하기 때문이다. 

코드를 작성하는게 두렵다고 해야하나? 어차피 내가 작성하는 코드는 동작하지 않으면 다 똥💩인데 말이다~

그리고 다시 작성하면 되는 걸~

그래서 이번에는 최대한 직접 구현하면서 부딪혀 보려고 한다. 물론 역시나! 시간이 많이 걸린다는게 단점인데 그래도 옛날이라면 상상하지 못했을 것이다ㅎㅎ

 

🌳 함께 자라기

더 빨리 자라고 싶다면 다음을 고민해라.

  1. 어떻게 이율을 높일 것인가
  2. 지속적으로 현명한 투자를 하는 방법은 무엇인가 

 

⇒ 지식이나 능력은 복리로 이자가 붙는다.

 

더하기 사고보다 곱하기 사고를 하자.

  • 더하기 사고: 가용시간을 늘리고, 쓸데없이 낭비되는 시간을 줄이고, 잠자는 시간을 줄이는 것
  • 곱하기적 사고: 집단의 지능을 높이는 것 ⇒ 모든 지적 활동의 효율이 좋아지기 때문에 전반적인 개선이 일어나 개선 작업을 더 잘하게 된다.

=> 어떻게 하면 더하기보다 곱하기 시간을 늘릴 것인가?

=> 어떻게 해야 곱하는 비율(이자율)을 높일 수 있는가 혹인 이자 적용 주기를 짧게 할 수 있는가?

 

책에서는 다음의 방법을 제안한다.

  • 자신이 이미 갖고 있는 것을 잘 활용하라.
    • 이미 갖고 있는 것은 잘 연결할 것 → 이미 습득한 지식, 기술, 경험 등을 서로 연결 지어서 시너지 효과가 나게 하고 하나의 영역에서 다른 영역으로 오고가는 것을 자주해서 다른 영역 간을 넘나들기 수월하게 해라.
    • 현재 내가 하는 일이 차후에 밑거름이 되도록!
  • 외부 물질을 체화하라.
    • 외부의 것이 들어오고 생긴 내부의 갈등을 해결하는데 집중해라.
  • 자신을 개선하는 프로세스에 대해 생각해 보라.
    • 회고해라.
    • 개선하는 과정을 어떻게 하면 개선할 수 있을지 고민해라.
  • 피드백을 자주 받아라.
    • 사이클 타임을 줄여라.
    • 일찍, 그리고 자주 실패하고, 실패에서 학습해라.
  • 자신의 능력을 높여주는 도구와 환경을 점진적으로 만들어라.
    • 완벽한 도구와 환경을 갖추는 데 집착하지 말라.

학습 프레임 vs 실행 프레임

  • 실행 프레임은 현재 주어진 과업이 좋은 성과를 내는 것으로 생각하는 틀을 말한다.
  • 학습 프레임은 현재 주어진 과업이 내가 얼마나 배우느냐로 여기게 되는 틀을 말한다.

⇒ 현재 하고 있는 주어진 과정을 학습 프레임이라고 생각하자!

 

 

내일 할 일 📝
- 알고리즘 문제 풀이
- pintos 과제 수행
- pintos 공부 내역 정리
반응형