2023-11-15
오늘은 기하학 과제를 풀었다.
주어진 모든 점을 연결한 직선에 대해서 교차점의 개수를 구하는 함수의 구현이다. 지금까지 배운 기하학 지식을 바탕으로 직선의 방정식과 for 루프를 이용해 구현하였는데, 지금 약간의 로직 개선점이 보이지만. 그래도 처음 시도 치고는 괜찮은 성과를 얻었다.
클래스를 선언하는 것과 정의하는 것의 차이를 구분할 수 있게 되었다. 선언을 먼저 하면 클래스 내부의 맨 밑에 변수를 선언해도 아무런 상관이 없다. 정의 부분(몸통)에서 사용되는 변수가 선언전에 실행될 일이 없기 때문이다.
또, 함수로 값을 넘길 때 참조자의 사용이 매우 효율적이라는 것을 깨달았다. 클래스의 객체를 넘길 때, 객체 전체의 자료값을 복사하는 것만큼 비효율적인 게 없기 때문이다. Pointer도 그런 의미에서 매우 효율적이라는 걸 알았다.
참조자나 포인터 개념이 없으면 대체 객체를 인자로 어떻게 넘겨야 할지, 내가 지금까지 Java나 다른 언어를 사용할 땐 어떻게 했었는지 기억이 안나서 확인해봤는데,, Java같은 언어에서는 기본적으로 인자로 넘겨지는 클래스에 대해 참조자와 비슷하게 사용할 수 있게 백에서 구현된다고 한다.
또, 이번 과제를 해결하면서 switch case문의 이슈에 대해 알게 되었다. 바로 각 case간의 점프 문제인데,
특정 case에서 선언된 변수는, 실행되지 않고 바로 점프되어서 선언을 못할 수 있는데. 이를 외부에서 참조할 경우 jump bypasses variable initialization
에러가 난다. 이러한 문제에 대한 대안으로. case의 몸통을 {} 로 감싸는 방법이 있다. 그러면 보다 안전하게 변수를 선언하고 사용할 수 있다.
모든 직선에 대한 교차점을 검증할 때, for문 두개로 n*n개에 대한 직선 검사를 실행하고 결과값을 2로 나누는데, 이것보다 더 효율적인 로직이 있는지 내일 공부해봐야 겠다.
오늘의 백준
11654
최종 평가
최고급 평가사 일론머스크의 평가
-------------------------------
[평가 대상]
2023-11-15의 학습 내용
[학습 내용 요약 및 평가]
1. **기하학 과제 - 교차점 개수 구하기**: 기하학적 개념과 프로그래밍 기술을 활용한 문제 해결 능력이 눈에 띕니다. 직선의 방정식을 이용한 접근 방식은 기하학적 사고와 프로그래밍 능력의 조화를 잘 보여줍니다.
2. **클래스 선언과 정의의 구분**: 객체지향 프로그래밍에서 클래스 선언과 정의의 차이점을 이해하는 것은 중요합니다. 이에 대한 깊이 있는 이해는 더 나은 코드 설계와 유지보수에 기여할 것입니다.
3. **참조자와 포인터의 효율성**: 객체 전달 시 참조자와 포인터의 사용에 대한 이해는 메모리 관리와 실행 효율성을 크게 향상시킬 수 있습니다. 이는 특히 크기가 큰 객체를 다룰 때 중요합니다.
4. **switch case문과 변수 초기화**: switch case문의 변수 초기화 문제에 대한 인식과 해결 방안 제시는 프로그래밍에서 발생할 수 있는 복잡한 상황에 대처하는 능력을 보여줍니다.
[개선 및 보완점]
- **효율적인 알고리즘 탐색**: 직선 교차점 검증을 위한 for문의 효율성 개선이 필요합니다. 이중 for문 대신 다른 알고리즘을 고려해 보는 것이 좋습니다. 예를 들어, 분할 정복, 해시 테이블, 또는 그래프 이론 등을 활용할 수 있습니다.
- **Java와 C++의 객체 전달 비교**: Java에서 객체를 전달하는 방식과 C++에서의 참조자, 포인터 사용의 차이점에 대해 더 깊이 연구해 보면 좋겠습니다. 이는 언어 간의 중요한 차이점을 이해하는 데 도움이 됩니다.
[점수]
90/100
[추가 코멘트]
오늘의 학습 내용은 고급 프로그래밍 기술과 이론적 지식의 통합을 잘 보여줍니다. 다만, 알고리즘 효율성과 다른 언어 간의 차이점에 대한 더 깊은 이해가 필요합니다. 계속해서 이러한 방향으로 학습을 진행한다면 더욱 높은 수준의 전문성을 발휘할 수 있을 것입니다.
'일일 스터디노트' 카테고리의 다른 글
231120: xmas-event-2023 시작 (0) | 2023.11.20 |
---|---|
231116: 선분과 직선, 로직엔 문제가 없었다. (0) | 2023.11.16 |
231114: CGV 알림, 몬티홀 딜레마, 기하학, 피타고라스, 다이아몬드 찍기 (0) | 2023.11.14 |
231113: 기하학 해결중, 체스 문제 (0) | 2023.11.13 |
231112: 초기화 리스트와 this-> (0) | 2023.11.13 |