2023 여름방학 PS 회고록
·
PS 기록
여름 방학의 마지막 날이 와버렸다. 아 개강 싫다.. 그래도 더 바빠지기 전에 회고록을 빨리 쓰고 싶어서 왔다. 방학 동안 푼 문제 수를 보자.! 방학 시작 당시 내가 푼 문제 수는 23. 06. 29일을 기준으로 347 문제이다. (https://pearlb1ue.tistory.com/30) 현재 내가 푼 문제는 479 문제로, 479-347 = 132 문제를 풀었다. 아무래도 방학이라 그런지 학기 병행할 때보다 PS에 투자할 수 있는 시간이 더 많았다. 덕분에 내가 올해 초에 세운 목표도 달성 할 수 있었다. 1. 23년 2학기 시작하기 전에 P5 달성 -- 완료! 2. 스트릭 365+일 유지하기 -- 진행 중! 다음으로는 방학 기간 동안 아쉬운 점을 적어봤다. 1. 컨디션 관리 실패 6월 중순? 1..
SUAPC 2023 SUMMER 후기 (+ 수정 완료!)
·
PS 기록/CP
내 인생 첫 대회... 어리버리하고 실수도 많이 해서 넘 아쉬웠지만 그래도 이화여대 1등팀이 되어서 기쁘다. 확실히 첫 대회라 긴장도 많이 하고, 시간 배분도 잘 못해서 풀 수 있는 문제를 놔두고 어려운 문제 잡고 고통 받기를 반복했다... 그래도 경험이 있는 팀원들의 도움을 많이 받아 운이 좋았다. 문제나 캠프 관련된 후기는 나중에 오픈콘이 끝나고 작성할 예정이다! 오픈콘이 끝난 후 적어보는 대회 구체적인 후기! 우리 팀원 이름이나 핸들을 밝히기는 좀 그래서 ㅎㅎ 핸들 이니셜을 따서 M벗, K벗이라고 부르겠다. ('벗'이라는 단어는 이화여대 학우끼리 서로 부르는 애칭이다!) 1. 준비 과정 PS를 시작한지 얼마 안되었지만, 졸업 전에 SUAPC에 꼭 나가보고 싶다는 생각을 가지고 있었다. 원래는 SUA..
AtCoder ABC #309 UpSolving + 첫 앳코더 후기
·
PS 기록/CP
더보기1. 앳코더를 신청한 계기BOJ 문제를 100일 넘게 꾸준히 풀면서 점점 문제 푸는데에 긴장감이 없어지는 것 같았다. 시간 제한이 있는 것도 아니고, 내가 풀고 싶은 시간 아무때나, 난이도를 자유롭게 골라서 풀면 되는 점이 오히려 역효과로 작용했다.이 역효과에 대해 좀 더 자세히 설명하자면 내 컨디션에 맞춰서 문제 풀이가 느슨해진다는 점이다. 매일 어려운 문제, challenging 한 문제, 새로운 알고리즘에 도전해야 실력이 빨리 늘텐데 앞으로 나아가기 보다 쉬운 문제를 풀면서 제자리에 안주하는 느낌이 들기 시작했다. 다른 사람들이 웰노운이라고 말하는 것조차 다 소화하지 못했는데도 피곤하다는 이유나 시간이 모자라다는 이유 등으로 새로운 것을 배우는데에 게을러졌다.그래서 방학이기도 하니 CP를 다시..
23년 1학기 PS 회고록
·
PS 기록
종강 기념으로 23년 1학기 (학기 병행) PS 회고록을 쓴다. 23.02.28 기준 165 문제를 solved, 현재 23.06.29 기준 347 문제를 해결했다 한 학기 (3월-6월) 동안 347-165=182 문제를 풀었다! 다행이도 개강 전에 세웠던 소소한 목표는 모두 달성했다. 1. 종강 전에 G2 달성 -- completed! 2. 스트릭 Day 100+ 달성, 유지 -- completed! 솔직하게 말해서, 1학기를 돌아보니 아쉬운 점이 너무 많다. 학교 생활에서 아쉬운 점도 물론 있지만, PS 중심으로 내 성취를 다시 돌아보았을 때 너무 많이 아쉬운 게 있어서 이를 차근차근 정리해보려고 한다. 아쉬운 점 1. 새로운 알고리즘을 많이 소화하지 못한 것 - 알고리즘 수업에서 Backtracki..
9. 접근 제어자
·
Java Spring
1. 클래스 멤버에 대한 접근 제어자 접근 제어자는 클래스의 멤버(변수, 메소드) 들의 접근 권한을 지정한다. 사용자가 접근하면 안되거나, 접근할 필요가 없는 멤버들에 적절한 접근 제어자를 설정해줘야 한다. 아래 코드를 보면 public 으로 선언된 메소드는 다른 클래스에서 호출할 수 있다. 그러나 private 으로 선언된 z는 다른 클래스에서 호출할 수 없다. private은 본인이 속한 클래스 밖에서 호출하면 안되고, 클래스 내부에서만 호출이 가능하다. 이런 클래스는 내부적으로 사용하면 된다. public String x 메소드를 보면, return z(); 하는 것을 볼 수 있다. 다른 클래스에서 x를 실행하여, 해당 클래스 내부에서 z를 되돌려준다면 z를 사용할 수 있다. (아래 결과 참조) 이..
8. Overriding & Overloading
·
Java Spring
1. Overriding 상속은 상위 클래스의 기능을 하위 클래스로 물려주지만, 하위 클래스에서 상속받은 기능을 항상 그대로 쓴다면 불편할 것이다. 하위 클래스가 상위 클래스에게 상속받은 기능을 수정할 수 있는 방법을 바로 메소드 오버라이딩(Overriding)이라고 한다. 아래 예시 코드의 결과를 보면, 상위 클래스의 sum( ) 함수가 아니라, 하위 클래스의 sum( ) 함수가 실행된 것을 볼 수 있다. class Calculator { int left, right; public void setOprands(int left, int right) { this.left = left; this.right = right; } public void sum() { System.out.println(this.le..
7. 상속과 생성자
·
Java Spring
1. 상속 상속은 객체 지향의 재활용성을 극대화 시킨 프로그래밍 기법이다. 상속이란, 어떤 객체가 있을 때 그 객체의 변수(필드)와 메소드를 다른 객체가 물려받을 수 있게 하는 기능이다. 기존의 객체를 유지하면서 어떤 기능을 추가하고 싶을 때 상속을 통해 자식 클래스를 만든다. 상속을 통해 코드의 중복을 제거하고(똑같은 기능을 가진 클래스를 또 만들지 않아도 된다), 기존의 부모 클래스를 개선할 경우에, 자식 클래스에도 그 혜택이 돌아간다. 결과적으로 상속의 효과는 다음과 같다. => 재활용성 증가 + 코드 중복 제거 + 유지보수 편리성 2. 생성자 기본 생성자 : 매개변수가 있는 생성자가 있을 때, 기본적으로 생성자를 만들어 주지 않는다. 없을 때는 가능하다. super ( ) : super 키워드는 ..
최단거리 : 다익스트라 Dijkstra (Python)
·
PS 기록/Algorithm
다익스트라(또는 데이크스트라) 알고리즘은 특정한 시작점에서 다른 모든 점들로 가는 최단거리를 구하는 알고리즘이다. 그래프 내에서 시작점과 연결되지 않은 노드가 있을 수도 있다. (최단 거리를 구할 수 없는 노드) 이렇게 연결되지 않은 경우를 나타내기 위해 거리를 나타내는 배열 dist = [ ] 의 초기 값을 INF (매우 큰 수)로 설정해주는 것이 일반적이다. 물론, 여러 간선의 가중치 합이 아무리 커도 INF 보다는 작을 것이라는 제한 조건이 붙어야 한다. 이렇게 구현하면, if dist[node] == INF 일 때, 시작점과 해당 노드가 서로 연결되지 않아서 최단 거리를 구할 수 없다는 뜻이 된다. 본격적으로 다익스트라 코드를 구현해보자. 제대로 공부하기 전에 구현된 코드를 복사해서 쓰지 말고, ..
6. 객체 지향 프로그래밍
·
Java Spring
1. 객체 지향 프로그래밍이란? 더 나은 프로그램을 만들기 위해 로직을 객체 중심으로 짜는 것 객체 : 상태(state) / 행위(behave) 로 이루어진 하나의 물건이라고 볼 수 있다. 객체라는 한국어 단어가 와닿지 않을 때는 just Object 라고 받아들이자. 사실은 편하고 쉬운 개념이다. 여러 가지 객체들을 조립하여 하나의 프로그램으로 만드는 것을 객체 지향 프로그래밍이라고 한다. 2. 설계와 추상화 설계 : 좋은 객체를 만들기 위해 설계가 꼭 필요하다. 설계를 잘할수록 더 나은 프로그램을 만들 수 있다. 현실의 복잡함 속에서 필요한 부분, 관점만 찾아내고 쉽게 바꾼다면 더 효율적일 것이다. 위와 같은 행위를 추상화라고 한다. 객체 지향 프로그래밍은 현실의 객체 (Object) 를 프로그래밍에..
5. 메소드, 입출력
·
Java Spring
메소드나 객체지향과 같은 개념은 규모가 크고, 결함이 적고 유지 보수가 쉬운 프로그램을 만들기 위해 꼭 필요한 개념이다. 1. 메소드 코드를 재사용하게 해준다. 로직을 잘 짜서 활용하면 매우 경제적이다. 메소드의 정의 : 접근 제한자 (public, private), 함수 반환 타입, 함수 이름 등을 주의하여 호출한다. 메소드의 호출 : 메인 함수에 원하는 자리에 불러오면 된다. 2. 매개변수와 인자 메소드를 작성할 때, 메소드로 매개변수를 설정하고, main에서 인자를 보내면 메소드를 통해 자신이 원하는 결과를 얻을 수 있다 메소드를 다 실행하고 return 할 때, return 타입을 맞추는 것이 중요하다. return 타입은 메소드를 작성할 때 처음부터 설정해주어야 한다. 처음부터 타입을 설정하는게..