Skip to content

Commit ef50cc1

Browse files
committed
2 parents 4756df6 + b6f7753 commit ef50cc1

File tree

5 files changed

+261
-1
lines changed

5 files changed

+261
-1
lines changed

.idea/.name

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/week01/Chanjong/PG_17682.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import java.util.ArrayList;
2+
3+
class PG_17681 {
4+
public int solution(String dartResult) {
5+
int answer = 0;
6+
ArrayList<Integer> scores = new ArrayList<>(); //최종 점수 3개를 저장하는 배열
7+
int i = 0;
8+
9+
//점수 저장 부분
10+
while(i<dartResult.length()){
11+
int num = 0;
12+
13+
if (Character.isDigit(dartResult.charAt(i)) && Character.isDigit(dartResult.charAt(i+1))){ //연속으로 숫자가 2자리일때(10일 경우)
14+
num = 10;
15+
i+=2;
16+
}
17+
else if (Character.isDigit(dartResult.charAt(i))){
18+
num = dartResult.charAt(i) - '0';
19+
i++;
20+
}
21+
22+
//문자 저장 부분
23+
if(dartResult.charAt(i) == 'S'){
24+
scores.add(num);
25+
}
26+
else if(dartResult.charAt(i) == 'D'){
27+
scores.add(num*num);
28+
}
29+
else{
30+
scores.add(num*num*num);
31+
}
32+
33+
//마지막에 옵션 없으므로 종료
34+
i++;
35+
if(i==dartResult.length()){
36+
break;
37+
}
38+
39+
//옵션 적용 부분
40+
int index = scores.size()-1; //옵션을 적용할 점수가 몇번째인지
41+
if(dartResult.charAt(i)=='*'){
42+
scores.set(index, scores.get(index)*2);
43+
if(index!=0){
44+
scores.set(index-1, scores.get(index-1)*2);
45+
}
46+
i++;
47+
}
48+
else if(dartResult.charAt(i)=='#'){
49+
scores.set(index, scores.get(index)*(-1));
50+
i++;
51+
}
52+
}
53+
54+
for (int score : scores){
55+
answer+=score;
56+
}
57+
return answer;
58+
}
59+
}

src/week01/Yoepee/PG_60058.java

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package week01.Yoepee;
2+
3+
// 괄호 변환
4+
public class PG_60058 {
5+
static class Solution {
6+
public String solution(String p) {
7+
String answer = "";
8+
// 빈 문자열인 경우, 빈 문자열 반환
9+
if (p.length() == 0) return "";
10+
// string의 길이가 2일 경우 올바른 괄호 문자열은 () 밖에 없으므로 () 반환
11+
else if (p.length() == 2) return "()";
12+
13+
// u가 끝나는 index
14+
int start = 0;
15+
// 괄호가 제대로 닫혔는지 확인하는 변수
16+
int count = 0;
17+
// 균형잡힌 괄호 문자열 u가 올바른 괄호 문자열인지 확인하는 변수
18+
boolean isRight = true;
19+
20+
// 균형잡힌 문자열 p를 u와 v로 나누는 로직
21+
for (int i = 0; i<p.length(); i++){
22+
count += p.charAt(i) == '(' ? 1 : -1;
23+
// count가 음수로 한번이라도 변경되면 올바른 괄호 문자열이 아님.
24+
if (count < 0) isRight = false;
25+
26+
// count가 0이 되면 괄호의 열림과 닫힘이 짝이 맞음
27+
// 균형잡힌 괄호 문자열임.
28+
if (count == 0){
29+
start = i+1;
30+
answer += p.substring(0, start);
31+
break;
32+
}
33+
}
34+
// 반복문을 모두 돌았는데 균형잡힌 문자열이 아닌 경우 u의 값을 문자열 전체로 지정
35+
if (count != 0) {
36+
start = p.length();
37+
answer += p.substring(0, start);
38+
}
39+
40+
// p에서 u를 제외한 문자열 v를 재귀함수를 통해 반환
41+
String v = solution(p.substring(start));
42+
// 수행한 결과를 문자열 u에 이어 붙임
43+
answer+=v;
44+
45+
// 문자열 u가 올바른 괄호 문자열이 아닌 경우 로직에 따라 processU 진행
46+
if (!isRight) {
47+
return processU(p.substring(0, start), v);
48+
}
49+
50+
// 최종 결과 answer 반환
51+
return answer;
52+
}
53+
54+
// 문자열 u가 올바른 괄호 문자열이 아닌경우 동작하는 로직
55+
private String processU(String p, String v){
56+
String answer = "";
57+
// 4-1. 빈 문자열에 첫 번째 문자로 '('를 붙입니다.
58+
answer += "(";
59+
// 4-2. 문자열 v에 대해 1단계부터 재귀적으로 수행한 결과 문자열을 이어 붙입니다.
60+
answer += v;
61+
// 4-3. ')'를 다시 붙입니다.
62+
answer += ")";
63+
// 4-4. u의 첫 번째와 마지막 문자를 제거하고, 나머지 문자열의 괄호 방향을 뒤집어서 뒤에 붙입니다.
64+
for (int i = 1; i<p.length()-1; i++){
65+
answer += p.charAt(i) =='(' ? ')' : '(';
66+
}
67+
68+
// 4-5. 생성된 문자열을 반환합니다.
69+
return answer;
70+
}
71+
}
72+
public static void main(String[] args) {
73+
Solution s = new Solution();
74+
75+
// 정상 결과 : "(()())()"
76+
System.out.println(s.solution("(()())()"));
77+
// 정상 결과 : "()"
78+
System.out.println(s.solution(")("));
79+
// 정상 결과 : "()(())()"
80+
System.out.println(s.solution("()))((()"));
81+
}
82+
}

src/week02/Juchan/PG_42586.java

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package week02.Juchan;
2+
3+
import java.util.ArrayList;
4+
import java.util.LinkedList;
5+
import java.util.List;
6+
import java.util.Queue;
7+
8+
public class PG_42586 {
9+
static class Solution {
10+
public int[] solution(int[] progresses, int[] speeds) {
11+
// 각 작업이 완료되기까지 남은 '일 수'를 저장할 큐
12+
Queue<Integer> queue = new LinkedList<>();
13+
14+
//(100-진도율)/개발 속도를 통해 남은 일 수 계산
15+
for (int i = 0; i < progresses.length; i++) {
16+
int day = (int) Math.ceil((100.0 - progresses[i]) / speeds[i]); //ex 3.8888 일이면 4일 필요하기에 ceil 함수를 사용해서 올림 처리 후 형 변환
17+
queue.offer(day);
18+
}
19+
List<Integer> result = new ArrayList<>();
20+
21+
// 첫번 째 배포 일 수를 뽑아냅니다.
22+
while (!queue.isEmpty()) {
23+
int current = queue.poll();
24+
int count = 1;
25+
26+
// 배포일과 비교하여 큐의 첫 번째 일 수가 작거나 같으면 같이 묶어서 리스트에 저장합니다.
27+
while (!queue.isEmpty() && queue.peek() <= current) {
28+
queue.poll();
29+
count++;
30+
}
31+
result.add(count);
32+
}
33+
int[] answer = new int[result.size()];
34+
for (int i = 0; i < result.size(); i++) {
35+
answer[i] = result.get(i);
36+
}
37+
return answer;
38+
}
39+
}
40+
41+
public static void main(String[] args) { //테스트
42+
Solution solution = new Solution();
43+
44+
45+
int[] progresses = {93, 30, 55};
46+
int[] speeds = {1, 30, 5};
47+
48+
int[] result = solution.solution(progresses, speeds);
49+
50+
51+
System.out.print("[");
52+
for (int i = 0; i < result.length; i++) {
53+
System.out.print(result[i]);
54+
if (i != result.length - 1) { //마지막 요소는 , 를 빼줍니다.
55+
System.out.print(", ");
56+
}
57+
}
58+
System.out.println("]");
59+
// 예상 출력: [2, 1]
60+
}
61+
}
62+
63+
64+
/**
65+
* 문제
66+
* 각각 기능은 진도(progress) 가 있고, 매일 각 기능마다 개발 속도(speed) 만큼 진도가 올라간다.
67+
* 기능은 진도가 100% 이상이 되어야 배포 할 수 있다.
68+
* 배포는 하루에 한 번, 하루가 끝난 후 진행한다.
69+
* 진도가 뒤에 있는 기능이 앞 기능보다 빨리 끝날 수 있는데 뒤에 있는 기능은 앞 기능이 배포되는 시점에 같이 배포된다.
70+
* <p>
71+
* 풀이 방법
72+
* 1. 각 기능마다 100%가 될 때까지 걸리는 날을 계산한다.(100-진도율)/개발 속도
73+
* 2. 큐에서 가장 앞에 있는 기능을 꺼내 배포일을 지정한다.
74+
* 3. 배포일보다 작업이 먼저 끝난 뒤에 있는 기능도 같이 묶어준다.
75+
* 4. 묶인 기능의 수를 리스트에 넣어준다.
76+
* 5. 리스트를 출력한다.
77+
*/

src/week02/haemin/PG_81301.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package week02.haemin;
2+
3+
import java.util.HashMap;
4+
import java.util.*;
5+
6+
// 1
7+
class Solution {
8+
9+
private static HashMap<String, String> map = new HashMap<>();
10+
11+
public int solution1(String s) {
12+
// map 구성
13+
map.put("zero", "0");
14+
map.put("one", "1");
15+
map.put("two", "2");
16+
map.put("three", "3");
17+
map.put("four", "4");
18+
map.put("five", "5");
19+
map.put("six", "6");
20+
map.put("seven", "7");
21+
map.put("eight", "8");
22+
map.put("nine", "9");
23+
24+
for(String key : map.keySet()){
25+
s = s.replaceAll(key, map.get(key));
26+
}
27+
28+
int answer = Integer.parseInt(s);
29+
return answer;
30+
}
31+
}
32+
33+
// 2
34+
//class Solution2 {
35+
// public int solution(String s) {
36+
// String[] strArr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
37+
// for(int i = 0; i < strArr.length; i++) {
38+
// s = s.replaceAll(strArr[i], Integer.toString(i));
39+
// }
40+
// return Integer.parseInt(s);
41+
// }
42+
//}

0 commit comments

Comments
 (0)