Design Pattern(설계패턴)

Singleton pattern

어플리케이션 전체에서 객체 한개만 생성해서 사용하는 패턴

객체 한개를 공유해서 사용

두개 만들면 데이터의 동기화가 어려운 경우

 

SingletohObject.java

 

SingletohObjectUser.java

 

 

interface

interface

인터페이스는 상수와 구현되지 않은 메소드로만 구성된다.

추상 아닌것도 필요한데요? ---> 추상클래스 이용 !! interface X

인터페이스 상속 implements

다중상속을 지원하기 위함.

인터페이스 안의 필드는 기본으로 static, final

인터페이스 안의 메소드는 public abstract

 

자식클래스에서는 implements로 상속하고, 부모가 가지고 있던 메소드를 반드시 완성시켜야 한다.

 

 

 

'Computer Science > Languages' 카테고리의 다른 글

[java] 쓰레드(Thread)  (0) 2019.01.24
[java] 예외처리  (2) 2019.01.24
[java] Collection 활용  (0) 2019.01.17
[Java] final, static  (0) 2019.01.16
JAVA 입출력  (2) 2019.01.08

java0116

 

final

  • class

    상속을 받을 수 없다.

    상속을 받는 이유 : 물려받아서 수정하고, 오버라이딩하고 ... --> 불가

    final class는 처음에 만들어 놓은 모양 그대로만 사용할 수 있다.

     

  • method

    overriding(재정의) 불가

    클래스 상속은 가능, 클래스 안의 다른 메소드는 가능.

    final이 붙은 메소드만 오버라이딩 불가.

 

클래스가 파이널이면, 클래스 상속 불가. 그안의 메소드도 건들일 수 없다. ==> final method 효과

일반 클래스에서 한 메소드만 final면, 그 메소드만 overriding 불가.

 

  • variable

    상수가 된다. 항상 변하지 않는 값.

     

    ex) math.class

    final class ==> 모든 메소드와 변수는 final. 즉, 고칠 수 없다.

     

     

 

**static

field variable, method, block 에 붙힐 수 있다.

 

생성이 되는 위치와 시점이 다르다.

 

소스파일 --컴파일--> 실행파일 ----> ~~~

.src .class

 

컴파일 하다가 static 을 만나면 인식하고,

실행버튼 누르면. main이 실행되기 전에 (컴파일 시점) static붙은 애들은 컴파일러가 미리 class area에 미리 만들어 놓는다. 1개만.

 

원래는 main이 실행되어야 객체가 만들어짐

count변수는 객체 생성을 해야 만들어진다.

static 변수를 사용할때는 객체 생성을 안해도 된다.

 

 

 

타 클래스에서 static변수를 사용하고 싶을때

==> 클래스이름.변수명

 

 

 

static method 안에서는 this, super 사용 불가능

main이 실행되기전에 생성되므로, this나 super가 없어서 error발생

'Computer Science > Languages' 카테고리의 다른 글

[java] 쓰레드(Thread)  (0) 2019.01.24
[java] 예외처리  (2) 2019.01.24
[java] Collection 활용  (0) 2019.01.17
[java] interface  (0) 2019.01.16
JAVA 입출력  (2) 2019.01.08

문제 보기 >> 5432. 쇠막대기 자르기




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
 
public class Solution_5432_쇠막대기자르기 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        
        for(int tc = 1 ;tc<= T ;tc++) {
            String str = br.readLine();
            char now;
            char[] arr = new char[str.length()];
            int piece = 0;
            int stick=0;
            for(int i=0;i<str.length();i++) {
                now = str.charAt(i);
                
                if(now==')') {
                    char pre = str.charAt(i-1);
                    if(pre == '(') { //레이저
                        stick--;
                        piece += stick;
                    }
                    else {
                        stick --;
                        piece++;
                    }
                }
                
                if(now == '(') {
                    stick++;
                }
                
            }
        
        
            System.out.println("#"+tc+" "+piece);
        }//testcase end
    }// end of main
}
 
cs


문제보기 >> 1218. [S/W 문제해결 기본] 4일차 - 괄호 짝짓기


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.util.Scanner;
import java.util.Stack;
 
public class Solution_1218_괄호짝짓기{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        for(int tc = 1; tc <=10;tc++) {
            int result = -1;
            int len = sc.nextInt();
 
            String str = sc.next();
            Stack s = new Stack();
            
            for(int i=0;i<len;i++) {
                if(str.charAt(i) == '(' || str.charAt(i) == '{' || str.charAt(i) == '[' || str.charAt(i) == '<' ) s.push(str.charAt(i));
                else if(str.charAt(i) == ')' || str.charAt(i) == '}' || str.charAt(i) == ']' || str.charAt(i) == '>') {
//                    if(s.isEmpty()){
//                        result = 0;
//                        break;
//                    }
                    char pop = (char) s.pop();
                    if ( (str.charAt(i) == ')' && pop =='(' ) 
                        || (str.charAt(i) == '}' && pop =='{' )
                        || (str.charAt(i) == ']' && pop =='[')
                        || (str.charAt(i) == '>' && pop =='<')) {
                        continue;
                    }else {
                        result = 0;
                    }
                    
                }
                if(result ==0 )break;
            }
            if(s.size() != 0) result = 0;
            else result = 1;
            
            
            System.out.println("#"+tc+" "+result);
            
            
        }
    }
}
 
cs




우리팀 첫 회식
승아 픽 치킨 성공 🤗

'Diary' 카테고리의 다른 글

역삼 민들레떡볶이  (3) 2019.01.30
역삼 호타루  (2) 2019.01.25
역삼 전봇대  (2) 2019.01.23
유스토리 블로그 테스트  (1) 2019.01.09
사이트맵  (0) 2019.01.08

문제 >> 1018. 체스판 다시 칠하기




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
 
int m,n;
char map[51][51]={0,};
char mmap[51][51]={0,};
 
int dy[2]={-1,0};
int dx[2]={0,-1};//위, 왼쪽
 
void map_copy(){
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            mmap[i][j] = map[i][j];
        }
    }
}
 
int make_chess(int start_y, int end_y, int start_x, int end_x){
    int change=0;
    map_copy();
    
    for(int i=start_y; i<=end_y;i++){
        for(int j=start_x; j<=end_x; j++){
           // now = mmap[i][j];
            
            for(int k=0;k<2;k++){
                int ny = i+dy[k];
                int nx = j+dx[k];
                
                if(ny<start_y || nx <start_x || ny>end_y || nx>end_x) continue;
                
                if(mmap[i][j] == mmap[ny][nx]){
                    mmap[i][j] = (mmap[i][j]=='W')? 'B':'W';
                    change++;
                }
                
            }
            
            
        }
    }
    
    return change;
}
 
 
 
int main(int argc, const char * argv[]) {
    
    scanf("%d %d"&m,&n);
    
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            scanf(" %c",&map[i][j]);
            //if(c=='\n')
        }
    }
    
    int min = 987654321;
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            int end_y = i+7;
            int end_x = j+7;
            if(end_y<&& end_x<n){
                int ret = make_chess(i,end_y,j,end_x);
                ret = ret > (64-ret)? 64-ret : ret;
                min = min > ret? ret : min;
            }
        }
    }
    
    printf("%d\n", min);
    
    return 0;
}
 
cs



1. 공백 없는 문자 입력받기

   scanf(" %c", &map[i][j]);

   % 앞에 띄어쓰기 해주기.


2. 입력으로 주어지는 문자들을 배열에 담고

   8x8 크기로 배열을 순회했다. (64번 코드)

   (i+7) 과 (j+7)이 map 범위 안 일 때만 실행.


3. 8x8 체스판의 시작점과 끝점을 parameter로 하는 함수를 만들어 체스판이 되기 위해 색 변경 횟수를 카운트했다.

   모든 index를 방문하면서, 본인 기준 왼쪽과 오른쪽 지점의 색을 확인해서 같다면 본인 색을 바꿔주는 식으로 카운트.


4. ** 헤맸던 부분

   8*8 체스판에서 

   0번 색을 변경 = 64번 변경  (변경할 색이 없다는 것은 모든 지점의 색을 반전해줘도 체스판이기 때문)

   1번 변경 = 63 번 변경 

   과 같다.


   따라서 함수를 통해 얻은 cnt 값과 64- cnt 값을 비교해 더 작은 값을 취하도록 한다. (66번 코드)


5. 최소값을 찾는다. (67)

문제 >> 1206. [S/W 문제해결 기본] 1일차 - View


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;
 
public class Solution {
    public static void main(String[] args) {
        
        Scanner s = new Scanner(System.in);
        
        for(int tc=1;tc<=10;tc++) {
            int n = s.nextInt();
            int[] map = new int[n];
            
            for(int i=0;i<n;i++) {
                map[i]=s.nextInt();
            }
            
            int ans = 0;
            for(int i=2;i<map.length-2;i++) {
 
                int[] arr = new int[4];
                arr[0= map[i-1];
                arr[1= map[i-2];
                arr[2= map[i+1];
                arr[3= map[i+2];
                Arrays.sort(arr);
                if(arr[3]<map[i]) {
                    ans += (map[i]-arr[3]);
                }
            }
            System.out.println("#"+tc+" "+ans);
        }
    }
}
 
cs




빌딩의 옥상에 서있는 '나'를 기준으로 좌우로 두칸 거리에 있는 빌딩들의 높이와 비교 해본다.  




4곳 모두 (좌로 1칸, 2칸 // 우로 1칸, 2칸) 본인보다 높이가 낮다면, (현재 빌딩 높이 - 4곳중 최대높이) 가 내가 서있는 빌딩의 확보된 조망권일 것이다.



각각의 빌딩의 높이를 입력받은 배열 map 을 방문하면서


좌우로 2칸 안에 위치한 빌딩의 높이들을 arr이라는 배열에 담아주고 sort 했다. 


arr의 최대 값이 현재 빌딩의 높이보다 낮다면, (현재 빌딩의 높이 - arr의 max) 가 현재 빌딩의 조망권이다..



+ Recent posts