import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.Stack;


public class Main {


static boolean bool = true;

static Stack stack = new Stack();

static Stack<Integer> stackInteger = new Stack<Integer>();


public static void main(String[] args) throws IOException {


BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String str = br.readLine();


int solve = 0;


    //1. 불가능한 경우가 아니면 push()진행

for (int i = 0; i < str.length(); i++) {

if (bool) {

String c = str.substring(i, i + 1);

push(c);

} else {

break;

}

}



   //2. 출력하기

if (stack.size() > stackInteger.size() || !bool) {

System.out.println(0);

} else {

for (int k = 0; k < stackInteger.size(); k++) {

solve += stackInteger.get(k);

}

System.out.println(solve);

}


}


private static void push(String c) {

if (c.equals("(") || c.equals("[")) {

stack.push(c);

} else {

pop(c);

}

}


private static void pop(String c) {

int temp = 0;

if (c.equals(")")) {

if (stack.isEmpty() || !stack.peek().equals("(")) {

while (stack.isEmpty() || !stack.peek().equals("(")) {

if (stack.isEmpty() || stack.peek().equals("[")) {

bool = false;

break;

} else {

stack.pop();

temp += stackInteger.pop();

}

}

temp = temp * 2;

} else {

temp = 2;

}

if (bool) {

stack.pop();

stack.push(temp);

stackInteger.push(temp);

}


} else {

if (!stack.peek().equals("[")) {

while (stack.isEmpty() || !stack.peek().equals("[")) {

if (stack.isEmpty() || stack.peek().equals("(")) {

bool = false;

break;

} else {

stack.pop();

temp += stackInteger.pop();

}

}

temp = temp * 3;

} else {

temp = 3;

}

if (bool) {

stack.pop();

stack.push(temp);

stackInteger.push(temp);

}


}


}


}

All the fields and methods must be static in a static method!!!


ex) public static void main(String[] args){


// fields or methods in here are static because 'main' method is used in common(?).


}

'WEB > java' 카테고리의 다른 글

OR, AND 논리연산자  (0) 2017.12.27
[구글링] stack & queue  (0) 2017.12.20
[생활코딩]제네릭  (0) 2017.12.08
[자바의 정석] Collection Framework  (0) 2017.12.08
[자바의 정석]조건문과 반복문  (0) 2017.12.08

1. array vs Collections Framework

배열은 길이를 처음에 지정해야 한다. 배열의 크기를 넘어서게 값을 입력하면 오류가 발생한다. 생성시 데이터타입을 지정한다.

ArrayList는 크기를 지정하지 않는다. 내부적으로 배열이 자동으로 늘어난다. 원래는 데이터타입이 Object이지만 데이터타입 안정성을 위해 제네릭을 사용해서 생성시 데이터타입을 지정해야한다.

StudentInfo<T> si = new StudentInfo<T>();


=> StudentInfo<String> si = new StudentInfo<String>();
=> StudentInfo<Integer> si = new StudentInfo<Integer>();


제네릭은 사용하는 이유 : 어떤 클래스 내의 변수의 타입을 유연하게 하기 위해 Object으로 지정하면 특정한 데이터타입의 집합으로 한정지을 수가 없다. 이렇게 될 경우, type safety가 만족되지 못한다. (사용자의 실수로 클래스가 원하지 않는 데이터타입을 입력해도 컴파일단계에서는 에러가 생기지 않고 런타임에러로 생긴다. 컴파일 단계에서 이러한 실수를 잡기 위해 Generic을 사용한다.) 제네릭은 그 자체는 어떤 데이터타입도 올 수 있지만 코딩단계에서 데이터타입을 명시한다. (?)


class EmployeeInfo{

public int rank;

EmployeeInfo(int rank) {

this.rank = rank;

}

}


class Person<T, S>{  //제네릭의 데이터타입은 기본 데이터타입은 에러가 발생한다. Wrapper클래스를 대신 사용한다.

public T info;

public S id;

Person(T info, S id){

this.info = info;

this.id = id;

}


public <U> void printInfo(U info){

System.out.println(info);

}

}



public class GenericDemo{

public static void main(String[] args){


1)

Integer id = new Integer(1); //wrapper 클래스로 감싼다.

Person<EmployeeInfo, Integer> p1 = new Person<EmployeeInfo, Integer>(new EmployeeInfo(1), id);

System.out.println(p1.id.intValue()); //다시 int형으로 가져온다.


---------------------------------------------------------------------


2) 데이터타입 명시 생략가능

EmployeeInfo e = new EmployeeInfo(1);

Integer i = new Integer(10);

Person p1 = new Person(e, i);


//p1.<EmployeeInfo>printlnfo(e);

p1.printlnfo(e);

}

}


-----------------------------------------------------------------------------------------------------------

3) T의 부모 클래스(상속 혹은 구현한 클래스)를 제한

interface Info{
int getLevel();
}
class EmployeeInfo implements Info{
public int rank;
EmployeeInfo(int rank){ this.rank = rank; }
public int getLevel(){
return this.rank;
}
}
class Person<T extends Info>{
public T info;
Person(T info){ this.info = info; }
}
public class GenericDemo {
public static void main(String[] args) {
Person p1 = new Person(new EmployeeInfo(1));
Person<String> p2 = new Person<String>("부장");
}
}


'WEB > java' 카테고리의 다른 글

OR, AND 논리연산자  (0) 2017.12.27
[구글링] stack & queue  (0) 2017.12.20
[NOTE] Field, method in static method  (0) 2017.12.19
[자바의 정석] Collection Framework  (0) 2017.12.08
[자바의 정석]조건문과 반복문  (0) 2017.12.08

enum은 열거형(enumerated type 혹은 enumeration)이라고 부른다. 자바 이전에 많은 사람들이 상수를 효과적으로 쓰기 위해 만든 타입이다. 열거형은 서로 연관된 상수(변하지않는 값)들의 집합이라고 할 수 있다. (새로 개발할때는 되도록 안쓰는 것이 좋지만 이전에 작성된 코드를 이해하기 위해서 알고있는 것이 좋다.)


 class Fruit{

public static final Fruit BANANA = new Fruit();

public static final Fruit APPLE = new Fruit();

}


==> 

enum Fruit{

BANANA, APPLE

}


enum이 서로 다른 상수 그룹에 대한 비교를 컴파일 시점에서 차단할 수 있다는 것을 의미한다. 상수 그룹 별로 클래스를 만든 것의 효과를 enum도 갖는다는 것을 알 수 있다.

enum을 사용하는 이유를 정리하면 아래와 같다.

  • 코드가 단순해진다.
  • 인스턴스 생성과 상속을 방지한다.
  • 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 나타낼 수 있다.


1. 컬렉션 프레임웍의 핵심 인터페이스

 Collection Framework에서는 컬렉션(데이터 그룹)을 크게 3가지 타입이 존재한다고 인식하고 각 컬렉션을 다루는데 필요한 기능을 가진 3개의 인터페이스를 정의하였다. 그리고 List와 Set의 공통된 부분을 다시 뽑아서 새로운 인터페이스인 Collection을 추가로 정의 하였다.  


1) List는 순서가 있는 데이터의 집합. 데이터의 중복을 허용한다. 

   구현클래스 : ArrayList, LinkedList, Stack, Vector

2) Set 순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않는다. 

   구현클래스 : HashSet, TreeSet 등

3) 키와 값의 쌍으로 이루어진 데이터의 집합. 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다. 

   구현클래스 : HashMap, TreeMap, Hashtable, Properties 등


 컬렉션 프레임웍의 모든 컬렉션 클래스들은 List, Set, Map 중의 하나를 구현하고 있으며, 구현한 인터페이스의 이름이 클래스의 이름에 포함되어 잇어서 이름만으로도 클래스의 특징을 쉽게 알 수 있도록 되어있다. 그러나  Vector, Stack, Hashtable, Properties와 같은 클래스들은 컬렉션 프레임웍이 만들어지기 이전부터 존재하던 것이기 때문에 컬렉션 프레임웍의 명명법을 따르지 않는다. Vector나 Hashtable과 같은 기존의 컬렉션 클래스들은 호환을 위해, 설계를 변경해서 남겨두었지만 가능하면 사용하지 않는 것이 좋다. 그 대신 새로 추가된 ArrayList와 HashMap을 사용하자. 


1) ArrayList : 내부적으로 array를 사용하여 구현됨. 크기를 지정하고 ㅁ

'WEB > java' 카테고리의 다른 글

OR, AND 논리연산자  (0) 2017.12.27
[구글링] stack & queue  (0) 2017.12.20
[NOTE] Field, method in static method  (0) 2017.12.19
[생활코딩]제네릭  (0) 2017.12.08
[자바의 정석]조건문과 반복문  (0) 2017.12.08

1. switch문

switch  (조건식) {
    case 값1  : 

break;

    case 값2  : 

break;

    default : 

}

 default문은 if문의 else블럭과 같은 역할을 한다고 보면 이해가 쉬울 것이다. default문의 위치는 어디라도 상관없으나 보통 마지막에 놓기 때문에 break문을 쓰지 않아도 된다. 

  조건식에 맞는 값을 위에서부터 순차적으로 찾아가며, 조건식에 맞는 case가 시작점이 되는 것이다. break문이 없으면 계속 아래 case의 명령어를 수행한다. 

 switch문 조건식의 결과는 정수 또는 문자열 또는 정수 상수만 가능하며, 중복되지 않아야 한다.


2. for문

for(초기화; 조건식; 증감식) {
    수행될 문장

}

 제일먼저 1)초기화가 수행되고, 그 다음 2)조건식이 참인 동안 3)수행될 문장 4)증감식의 순서로 계속 반복된다. 따라서 초기화 후, 조건식이 참이어야 실행이 시작된다.


3. while문 

 조건식이 참이면 블럭{}내의 문장을 수행하고 다시 조건식으로 돌아간다. 즉, 블럭 내의 문장을 모두 수행하는 동안은 조건식의 참거짓을 판단하지 않는다. 


4. do-while문

do {
} while (조건식);   <-- 끝에 ;를 잊지 않도록 주의 

 do-while문은 while문의 변형으로 기본적인 구조는 while문과 같으나 조건식과 블럭{}의 순서를 바꿔놓은 것이다. 그래서 while문과 반대로 블럭{}을 먼저 수행한 후에 조건식을 평가한다. 즉, 최소한 한번은 블럭이 수행된다.


* break문 

 switch문에서 처럼 반복문에서도 break문을 사용할 수 있는데, break문은 자신이 포함된 가장 가까운 반복문을 벗어난다. 주로 if문과 함께 사용되어 특정 조건을 만족하면 반복문을 벗어나도록 한다. 


* continue문

 continue문은 반복문 내에서만 사용될 수 있으며, 반복이 진행되는 도중에  continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다. for문의 경우 증감식으로 이동하며, while문과 do-while문의 경우 조건식으로 이동한다. 전체 반복 중에 특정조건을 만족하는 경우를 제외하고자 할 때 유용하다. 

'WEB > java' 카테고리의 다른 글

OR, AND 논리연산자  (0) 2017.12.27
[구글링] stack & queue  (0) 2017.12.20
[NOTE] Field, method in static method  (0) 2017.12.19
[생활코딩]제네릭  (0) 2017.12.08
[자바의 정석] Collection Framework  (0) 2017.12.08

Ajax 처음

tooltip적용


tooltip에 image넣기 


1.

<a id="riverroad" href="#" title="<img src='http://icdn.pro/images/fr/a/v/avatar-barbe-brun-homme-utilisateur-icone-9665-128.png'" >image of 1 Maple St.</a>

2. 

HTML :

<a id='riverroad' href='#' title='' >image of 1 Maple St.</a>

JS :

<script>
  $(function() {
    $( document ).tooltip({
      items: "a",
      content: function() {
        if (element.attr('id') === 'riverroad') {
          return "<img class='map' src='./images/myimage.jpg' />";
        }
      }
    });
  });
</script>


+ Recent posts