8주차
계획
- 지금까지 학습했던 자료구조들을 바탕으로 부족했던 파트에서 복습 및 예제풀이
- 웹프로그래밍은 지금까지 학습한 HTML 기본태그와 CSS 기초 복습 후 기존 웹페이지 발전
결과
- 기존에 학습했던 알고리즘 관련 자료구조 중 특히 이해가 어려웠던 부분인 정렬부분을 좀 더 학습하고 예제를 풀었다. 백준 알고리즘 문제중 국영수 성적을 바탕으로 학생을 정렬하는 문제에서 삽입정렬을 이용하여 정렬을 하였다. 그러나 실제 삽입정렬의 최악의 경우의 시간복잡도가 백준에서 요구하는 시간을 초과하여 수정을 해야 했다. 합병정렬을 이용하여 문제를 풀고자 했으나 아쉽게도 오늘 모임시간내에 해결하지는 못했다. 기존 삽입정렬을 이용한 코드는 다음과 같다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String name;
int k, e, m;
int sNum = scan.nextInt();
Student[] s = new Student[sNum];
for (int i = 0; i < sNum; i++) {
name = scan.next();
k = scan.nextInt();
e = scan.nextInt();
m = scan.nextInt();
s[i] = new Student(name, k, e, m);
}
Sort(s, 0, sNum-1);
for (int i = 0; i < sNum; i++) {
System.out.println(s[i].name);
}
}
public static void Sort(Student[] s, int sNum) {
Student is;
int j;
for (int i = 1; i < sNum; i++) {
is = s[i];
for (j = i; j > 0 && ((is.kor == s[j - 1].kor && is.eng == s[j - 1].eng && is.math == s[j - 1].math
&& is.name.compareTo(s[j - 1].name) < 0)
|| (is.kor == s[j - 1].kor && is.eng == s[j - 1].eng && is.math > s[j - 1].math)
|| (is.kor == s[j - 1].kor && is.eng < s[j - 1].eng) || is.kor > s[j - 1].kor); j--) {
s[j] = s[j - 1];
}
s[j] = is;
}
}
}
}
class Student {
String name;
int kor, eng, math;
Student(String name, int kor, int eng, int math) {
this.name = name;
this.kor = kor;
this.eng = eng;
this.math = math;
}
}
아무래도 단순히 문제를 해결하는 것이 아닌 실제 시간복잡도를 고려하여 알고리즘을 구성할 필요성을 느꼈다.
- 웹프로그래밍 같은 경우에는 이번 모각코 모임에서 설정한 목표가 HTML 과 CSS의 기본을 학습하는 것이었는데, 실제로 학습한 결과 javascript에서 보다 상위의 웹제작을 할 수 있는 것을 알게 되었고 이 때문에 웹프로그래밍 학습같은 경우에는 아쉬움이 남았다. 기초적인 HTML 태그로는 한계를 느꼈고 결국 기존 웹페이지에서 CSS를 이용한 디자인의 향상만 할 수 있어 대략 모임의 중간부터는 실력의 향상이 무뎌졌기 때문이다. 비록 모각코 모임은 끝이 났지만 javascript 를 학습하여 내 실력을 발전하고 싶다는 생각이 들었다.