✔ 계산기3 [SWEA 1224] 문제 분석하기 피연산자일 경우 문자열에 저장, 연산자일 경우 스택이 비었을 경우 스택에 저장 이후 다른 연산자가 들어오기 전에 꺼내어 후위 표기 연산으로 변경 이때 괄호, *, +가 존재하며 괄호, *, + 순으로 우선순위가 높으므로 괄호 )가 존재할 경우 괄호 (부터 넣은 연산자를 모두 나오도록 함 그리고 만들어진 후위 표기 연산에 대해 피연산자일 경우 스택에 넣고, 연산자일 경우 앞의 두 피연산자를 꺼내 계산 손으로 풀어보기 문자열을 저장 문자열을 후위 표기식으로 변환 피연산자라면 결과 문자열에 저장 ( 연산자라면 스택에 저장 ) 연산자라면 ( 괄호 전까지의 연산자들을 문자열에 저장 * 연산자라면 스택에 저장 + 연산자라면 스택에 이미 연산자가 있다면 꺼내서 결과 문..
✔ 계산기2 [SWEA 1223] 문제 분석하기 피연산자일 경우 문자열에 저장, 연산자일 경우 스택이 비었을 경우 스택에 저장 이후 다른 연산자가 들어오기 전에 꺼내어 후위 표기 연산으로 변경 이때 *와 +가 존재하며 *는 +보다 우선순위가 높으므로 *와 +가 존재할 때 *부터 나오도록 함 그리고 만들어진 후위 표기 연산에 대해 피연산자일 경우 스택에 넣고, 연산자일 경우 앞의 두 피연산자를 꺼내 계산 손으로 풀어보기 문자열을 저장 문자열을 후위 표기식으로 변환 피연산자라면 결과 문자열에 저장 * 연산자라면 스택에 저장 + 연산자라면 스택에 이미 연산자가 있다면 꺼내서 결과 문자열에 저장 후 연산자를 저장 후기 표기식으로 변환한 연산을 계산 피연산자라면 스택에 저장 연산자라면 앞의 두 개의 피연산자를 꺼..
✔ 계산기1 [SWEA 1222] 문제 분석하기 피연산자일 경우 문자열에 저장, 연산자일 경우 스택이 비었을 경우 스택에 저장 이후 다른 연산자가 들어오기 전에 꺼내어 후위 표기 연산으로 변경 예) 3+4+5 String result = 34, stack = '+' → 34+ String result = 34+5, stack = '+' → 34+5+ 그리고 만들어진 후위 표기 연산에 대해 피연산자일 경우 스택에 넣고, 연산자일 경우 앞의 두 피연산자를 꺼내 계산 예) 34+5+ '+' → 3 + 4 = 7 '+' → 7 + 5 = 12 손으로 풀어보기 문자열을 저장 문자열을 후위 표기식으로 변환 피연산자라면 결과 문자열에 저장 연산자라면 스택에 저장 스택에 이미 연산자가 있다면 꺼내서 결과 문자열에 저장..
✔ GNS [SWEA 1221] 문제 분석하기 각 숫자의 값 단어를 문자열 배열에 저장한 후 이에 따른 인덱스를 사용 손으로 풀어보기 각 숫자의 값 단어를 문자열 배열에 저장 문자열을 받아 문자열에 해당하는 인덱스로 저장 저장된 인덱스들을 오름차순으로 정렬 정렬한 값에 따라 인덱스를 가지고 올바른 값 단어를 출력 슈도코드 작성하기 T(테스트 케이스 수) = 테스트 케이스의 갯수 저장 for(T만큼) { t(# 기호와 테스트 케이스의 번호) n(테스트 케이스의 길이) numbers(각 숫자의 값 단어를 저장하는 문자열 배열) arr(문자들의 인덱스를 저장하는 배열) for(i -> n만큼) { string(문자) for(numbers를 돌면서) { if(numbers의 문자와 같다면) { arr[i] = ..
✔ Magnetic [SWEA 1220] 문제 분석하기 위아래로 1(빨강 N극)2(파랑 S극)이 있을 경우 움직이지 못하는 교착 상태가 되게 됨 손으로 풀어보기 100 x 100 배열에 테이블 정보를 저장 한 줄 씩 위에서 아래로 내려오면서 확인 1일 경우 flag를 true로 변환 2일 경우 이전에 1이 있어 flag가 true이라면 교착 상태 갯수 증가 1, 2가 함께 교착 상태 1개가 되어 갯수가 증가 되었으므로 flag를 다시 false로 변경 후 반복 한 줄을 완료한 후 flag를 false로 변경 교착상태 갯수 반환 슈도코드 작성하기 T(테스트 케이스 수) = 10 for(T만큼) { n(정사각형 테이블의 한 변의 길이) arr(자성체 저장 2차원 배열 (100 x 100 만큼)) for(i ..
✔ 길찾기 [SWEA 1219] 문제 분석하기 모든 거리가 1이므로 가중치가 없는 인접 리스트로 그래프를 표현한 후 A에서 DFS를 수행하여 B에 도달할 수 있다면 1, 아니면 0을 반환 손으로 풀어보기 100 크기의 인접 리스트에 그래프를 저장 0에서 시작하여 DFS 탐색 알고리즘을 수행 99에 도달한다면 1 반환, 아니면 0 반환 슈도코드 작성하기 T(테스트 케이스 수) = 10 for(T만큼) { t(테스트 케이스의 번호) n(길의 총 개수) arr(그래프 데이터 저장 인접 리스트), visited(방문 유무 저장 배열) visited 배열 초기화하기 for(n의 개수만큼 반복하기) { arr 인접 리스트의 각 ArrayList 초기화하기 } for(n의 개수만큼 반복하기) { arr 인접 리스트에..
✔ 괄호 짝짓기 [SWEA 1218] 문제 분석하기 스택을 이용해 괄호를 집어 넣은 후, 짝이 맞을 경우 함께 꺼냄 모든 문자열을 실행한 후 남은 괄호가 있을 경우 짝을 찾을 수 없어 유효하지 않음 손으로 풀어보기 스택에 괄호를 집어 넣음 괄호가 짝을 이루는 경우 스택에서 함께 제거 스택의 크기가 0이라면 유효하므로 1 반환, 0이 아니라면 유효하지 않으므로 0 반환 슈도코드 작성하기 T(테스트 케이스 수) = 10 for(T만큼) { n(테스트케이스의 길이) s(문자열) answer(문자열이 유효한지 유무) = 0 stack(괄호를 담을 stack) for(i -> n만큼) { ch(문자열[i]) if(ch가 ')'이면서 stack.peek가 '('라면) { stack.pop } else if(ch가 ..