Leetcode Java Building H2O
업데이트:
문제
코드
class H2O {
private Semaphore hSemaphore;
private Semaphore oSemaphore;
public H2O() {
this.hSemaphore = new Semaphore(2, true);
this.oSemaphore = new Semaphore(0, true);
}
public void hydrogen(Runnable releaseHydrogen) throws InterruptedException {
this.hSemaphore.acquire();
// releaseHydrogen.run() outputs "H". Do not change or remove this line.
releaseHydrogen.run();
this.oSemaphore.release();
}
public void oxygen(Runnable releaseOxygen) throws InterruptedException {
this.oSemaphore.acquire(2);
// releaseOxygen.run() outputs "O". Do not change or remove this line.
releaseOxygen.run();
this.hSemaphore.release(2);
}
}
결과
설명
-
어떠한 순서대로 호출하더라도 물의 분자식인 “HHO”(H2O)를 출력하는 H2O 클래스를 완성하는 문제이다.
- 문제 풀이에 필요한 전역 변수를 정의한다.
- hSemaphore와 oSemaphore는 “H”문자와 “O” 문자를 분자식 순서로 출력하기 위해 제어할 변수이다.
- 생성자인 H2O()를 정의한다.
- hSemaphore는 “H” 문자 출력 제어할 변수로, 2번의 잠금과 FIFO방식을 사용하는 Semaphore로 초기화한다.
- oSemaphore는 “O” 문자 출력 제어할 변수로, 1번의 잠금과 FIFO방식을 사용하는 Semaphore로 초기화한다.
- 메서드인 hydrogen(Runnable releaseHydrogen)을 정의한다.
- hSemaphore를 첫 번째 잠금하고 releaseHydrogen를 수행한다.
- oSemaphore를 첫 번째 잠금 해제한다.
- 메서드인 oxygen(Runnable releaseOxygen)을 정의한다.
- oSemaphore를 두 번째 잠금하고 releaseOxygen을 수행한다.
- hSemaphore를 두 번째 잠금 해제한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기