나의 풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Stack<Double> stack = new Stack<Double>();
char[] ch = br.readLine().toCharArray();
Map<Character, Integer> map = new HashMap<Character, Integer>();
char key = 'A';
for (int i = 0; i < n; i++) {
map.put(key, Integer.parseInt(br.readLine()));
key++;
}
for (char val : ch) {
if (Character.isAlphabetic(val)) {
stack.push(Double.valueOf(map.get(val)));
} else {
double temp = cal(stack.pop(), stack.pop(), val);
stack.push(temp);
}
}
System.out.format("%.2f", stack.pop());
}
public static double cal(Double a, Double b, Character c) {
if (c == '+') {
return b + a;
} else if (c == '-') {
return b - a;
} else if (c == '*') {
return b * a;
} else {
return b / a;
}
}
}
알파벳은 스택에 push, 연산자는 스택에서 pop하는데 2개씩 꺼내와서 반대로 연산해준다. 처음에 값을 넣는 것을 2차원 배열로 했더니 추가적인 계산이 필요해서 key, value값인 map으로 수정, 소수점 포매팅하는 것도 System.out.format로 한줄로 처리 및 출력
나의 풀이
import java.io.InputStreamReader;
import java.util.Stack;
import java.io.BufferedReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
char[] ch = br.readLine().toCharArray();
Stack<Character> stack = new Stack<Character>();
char c = 'a';
for (char val : ch) {
if (Character.isAlphabetic(val)) {
sb.append(val);
} else if (val == '(') {
stack.push(val);
} else if (val == ')') {
while (!stack.empty()) {
if ((c = stack.pop()) == '(') {
break;
}
sb.append(c);
}
} else {
while (!stack.empty() && priority(stack.peek()) >= priority(val)) {
sb.append(stack.pop());
}
stack.push(val);
}
}
while (!stack.empty()) {
sb.append(stack.pop());
}
System.out.println(sb.toString());
}
public static int priority(char ch) {
if (ch == '(') {
return 0;
} else if (ch == '+' || ch == '-') {
return 1;
}
return 2;
}
}
'('이면 스택에 push, ')'이면 스택에서 '('를 만나기 전까지 pop, 연산자들은 우선순위를 고려해 높을 때까지 pop 하고 출력 해주고 push로 삽입
이건 나중에 다시 풀어봐야겠다.
나의 풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
char[] alpha = br.readLine().toCharArray();
int[] answer = new int[26];
for (int i = 0; i < alpha.length; i++) {
answer[alpha[i] - 97]++;
}
for (int val : answer) {
sb.append(val+ " ");
}
System.out.println(sb.toString().trim());
}
}
빈도 수 구하는 알고리즘으로 해결
나의 풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
char[] alpha = br.readLine().toCharArray();
int[] answer = new int[26];
int[] location = new int[26];
for (int i = 0; i < answer.length; i++) {
answer[i] = -1;
}
for (int i = 0; i < alpha.length; i++) {
int input = alpha[i] - 97;
if (answer[input] != -1) {
answer[input] = location[input];
}else {
answer[input] = i;
location[input] = i;
}
}
for (int val : answer) {
sb.append(val + " ");
}
System.out.println(sb.toString().trim());
}
}
다른 사람들의 풀이를 보던 중 엄청난 방법을 봤다
-> indexOf() 사용한 풀이
나의 풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String temp = "";
while ((temp = br.readLine()) != null) {
int[] answer = new int[4];
char[] str = temp.toCharArray();
for (int i = 0; i < str.length; i++) {
if (str[i] >= 65 && str[i] <= 90) {
answer[1] ++;
}else if (str[i] >= 97 && str[i] <= 122) {
answer[0] ++;
}else if (str[i] >= 48 && str[i] <= 57) {
answer[2] ++;
}else if (str[i] == 32) {
answer[3] ++;
}
}
sb.append(answer[0] + " " + answer[1] + " " + answer[2] + " " + answer[3] + "\n");
}
System.out.println(sb.toString());
}
}
아스키코드로 해결
나의 풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(br.readLine().length());
}
}
흠...
나의 풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
char[] str = br.readLine().toCharArray();
for (int i = 0; i < str.length; i++) {
if (str[i] >= 65 && str[i] <= 90) {
if (str[i] >= 78) {
sb.append((char)(str[i] - 13));
} else {
sb.append((char)(13 + str[i]));
}
} else if (str[i] >= 97 && str[i] <= 122) {
if (str[i] >= 110) {
sb.append((char)(str[i] - 13));
} else {
sb.append((char)(13 + str[i]));
}
}else {
sb.append(str[i]);
}
}
System.out.println(sb.toString());
}
}
더하기, 빼기
나의 풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(" ");
long num1 = Long.parseLong((str[0] + str[1]));
long num2 = Long.parseLong((str[2] + str[3]));
System.out.println(num1 + num2);
}
}
int의 범위를 넘어감 -> long
나의 풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String[] post = new String[str.length()];
for (int i = 0; i < str.length(); i++) {
post[i] = str.substring(i, str.length());
}
Arrays.sort(post);
for (String val : post) {
System.out.println(val);
}
}
}
Arrays.sort()로 정렬 해결
3일에 걸친 자료구조 1 풀이 끄읕