1.
Scanner sc = new Scanner(System.in);
final int T = sc.nextInt();
for(int t =1 ; t<=T ; t++){ -> while(T-->0){
//Algorithm
System.out.println(정답);
}
2.
3.
try{ }catch(Exception e) {} -> private boolean inRange () {}
1) 148ms -> 104ms
4. for-Each vs 람다
for(Integer i :list) {
System.out.print(i+" ");
}
=>
String result = list.stream().map(String::valueOf).collect(Collectors.joining(" "));
System.out.println(result);
람다랑 for-Each랑 비슷할 줄 알았는데
for-Each : 84ms
람다 : 228ms
왜이렇게 크게나지.. 백준 2583문제 출력하면서 시간차가 이렇게 났다.
써볼라했더만 시간차가 많이난다.
5. System.out.println vs StringBuilder
1~N까지 출력
for (int i = 1; i <= N ; i++) { System.out.println(i); }
=>
StringBuilder sb = new StringBuilder();
for(int i = 1 ; i<= n; i++) {
sb.append(i+"\n");
}
System.out.println(sb);
1)632ms -> 180ms
백준 2741번.. 와우.. 출력 여러번 갈기는거보다 StringBuilder쓰는게 더 빠르네
메모리도 29960KB -> 10048KB 됬음
2)72ms -> 68ms
백준 11718번. 별로차이안나보이지만. 기본시간이 있기때문에 많이 차이난듯
6. s.charAt(i) - '0' vs String.valueOf(s.charAt(i))
String s = br.readLine();
for (int i = 0; i < n; i++) {
count += (s.charAt(i)-'0');
}
=>
String s = br.readLine();
for(int i=0; i<n; i++) {
count += Integer.parseInt(String.valueOf(s.charAt(i)));
}
1)72ms -> 64ms
백준 11720번. ㄷㄷㄷ.. char형을 String형으로바꾼후 Integer로 바꾼다.. 근데 이게 더 빠르네 ..
7.
String s = null;
while ( (s = br.readLine() ) != null{
}
8. Math.pow(2,M) -> 1<<M
9, String -> char 형 변환 하기.
s.toCharArray();
10. DP에서.
for (int i = 2; i <= N; i++) {
if (i % 6 == 0) {
array[i] = Math.min(Math.min(array[i / 2], array[i / 3] ),array[i-1]) + 1;
}else if (i % 3 == 0) array[i] = Math.min( array[i / 3],array[i - 1] ) + 1;
else if (i % 2 == 0) array[i] = Math.min(array[i / 2],array[i-1]) + 1;
else array[i] = array[i - 1] + 1;
}
-> Math.min을 엄청 쓴다.
=>
for (int i=2; i <= num; i++) {
D[i] = 1 + D[i-1];
if (i % 3 == 0 && D[i] > D[i/3] + 1)
D[i] = 1 + D[i/3];
if (i % 2 == 0 && D[i] > D[i/2] + 1)
D[i] = 1 + D[i/2];
}
=> 애초에 값을 넣어놓고 조건문에 걸어놓으면 될거를... Math.min이 너무 남발한다면 바꿀 생각을 해보자
11.String .trim();
와나 이거,, S/W역량테스트 때 이거해결할라고 얼마나 고민했는데
A V D S Q R 를 입력해야 할 때,
char[] 배열에 넣기 위해서 일단 trim제거 한후에 charAt하면 됬는데 이거몰라서
진짜 .....
12. BFS시에 .. 괜찮다~~
내코드 :
while (!q.isEmpty()) {
Node curN = q.poll();
int curS = curN.stair;
if(curS == G) {
System.out.println(curN.count);
return;
}
int nextC = curN.count + 1;
int nextU = curS + U;
int nextD = curS - D;
if (nextU <= F) {
if (!visited[nextU]) {
visited[nextU] = true;
q.add(new Node(nextC,nextU));
}
}
if(nextD > 0) {
if(!visited[nextD]) {
visited[nextD] = true;
q.add(new Node(nextC,nextD));
}
}
---------------------------- 다른사람꺼-------------------------------------------
int dx[] ={U,-1*D};
Queue<Node> q= new LinkedList();
q.add(new Node(time,v));
visited[v]=true;
while(!q.isEmpty()){
time =q.peek().time;
value = q.poll().value;
for(int i = 0;i<2;i++){
next = value+dx[i];
if(next==G){
return time;
}
if(1<=next && next<=F){
if(!visited[next]){
q.add(new Node(time+1,next));
visited[next]=true;
}
}
}
13. for(int i = A, i< B ; i++)
여기서 B에다가 변할 가능성이 있는 수는 자제하자.
큐나 스택이용에 B에다가 큐.size() 이런거하면
큐 뺴면은 다시 size 재야한다.
for문은 실행될때마다 B를 다시 계싼하기떄문에 성능면에서도...