자바 13

[JAVA] 자바에 대해서 알아보자!

1. 자바의 중요성과 발전 - 자바가 유명해진 이유는 다양한 운영체제(OS)에서 동일한 코드를 실행할 수 있게 만든 것이다. 자바가 나오기 전에는 각 OS에 맞게 코드를 다르게 작성해야 했지만, 자바는 이런 문제를 JVM을 통해 해결했다. 2. 자바 가상 머신(JVM) - JVM은 자바 코드를 OS와 독립적으로 실행시키는 역할을 한다. 이는 자바 프로그램이 OS에 구애받지 않고 실행될 수 있도록 해준다. 바이트코드는 플랫폼 독립적이며, 컴파일된 자바 코드(바이트코드)는 JVM을 통해 실행된다. (※ 바이트코드라고 해서 010011...로 이루어진 코드가 아니라 단순히 컴파일된 자바 코드를 바이트코드라고 한다.) 3. 자바의 실행 과정 - 소스코드는 컴파일 과정을 거쳐 .class파일(바이트 코드)로 변환..

[백준/알고리즘/python/java] 1874번 - 스택 수열

맨 처음에 문제를 이해하는데 시간이 좀 걸렸다. 이해한 바로는 이렇다. 「첫 줄에 n 이 입력되면, 둘째 줄 부터는 1부터 n 까지의 수를 차례로 입력한다. 그렇게 입력된 n 개의 수가 수열을 형성하도록 push 연산은 +, pop 연산은 - 로 표현하도록 출력하면 된다.」 이해가 안되면, 힌트를 보면 된다. 첫 번째 예제입력은 [4,3,6,8,7,5,2,1] 순으로 입력되었다. 이렇게 수열을 이루려면(출력이 예제입력처럼 되려면), 빈 stack = []에 차례로 push(1) → push(2) → push(3) → push(4) → pop() → pop() → push(5) → push(6) → pop() → push(7) → push(8) → pop() → pop() → pop() → pop() → ..

[백준/알고리즘/python/java] 4949번 - 균형잡힌 세상

백준 9012번 괄호 문제에서 소괄호 뿐만 아니라 대괄호도 추가되었다고 생각하면 된다. 입력의 종료조건으로 맨 마지막에 점 하나(".")만 들어온다고 했으니, 무한루프를 만들고, 입력이 점 하나(".")라면 프로그램이 종료되게 하고 그렇지 않으면 계속해서 입력을 하도록 구현하면 된다. 맨 처음에는 IndexError 가 났었다. (IndexError가 났었던 코드) stack = [] while(True): line = input() if(line == "."): break for s in line: if s == "(" or s == "[": stack.append(s) elif s == ")": if stack[-1] == "(": stack.pop() else: break elif s == "]":..

[백준/알고리즘/python/java] 9012번 - 괄호

괄호 문제는 스택 문제중에서도 흔한 유형에 속한다. 여는 괄호와 닫힌 괄호가 쌍을 이루고, 짝이 맞는다면 올바른 괄호 문자열 (Valid PS, VPS) 인 것이다. (코드는 아래와 같다.-파이썬,python) import sys input = sys.stdin.readline testcase = int(input()) for i in range(testcase): bracket = [] stack = [] command = input() bracket.append(command) for j in command: if j == "(": stack.append(j) elif j == ")": if(len(stack) == 0): break else: stack.pop(-1) if(j == command[-..

[백준/알고리즘/python/java] 10773번 - 제로

전형적인 스택 문제이다. 파이썬에서는 스택을 구현할 때, 리스트를 활용하여 push 역할은 append() 로 구현하고 pop 역할은 pop() 으로 구현하면 된다. (코드는 아래와 같다. -python) k = int(input()) sum = 0 number_list = [] for i in range(k): n = int(input()) if n == 0: # 입력된 수가 0 이면 pop number_list.pop(-1) else: number_list.append(n) for answer in number_list: sum += answer print(sum) pop() 안에 따로 인덱스 인자를 안 넣어주면 맨 끝의 원소를 빼준다. (pop(-1) 이나 pop()이나 같은 역할이다.) (아래는 ..

[백준/알고리즘/python/java] 10828번 - 스택

파이썬에서 스택 자료구조 라이브러리를 따로 제공하지 않는다. 대신, 리스트를 스택으로 기능하도록 구현할 수 있다. 이 문제가 바로 그런 문제이다. 문제에서 주어진 다섯가지 명령을 함수로 만들어도 되는데, 우선 스택을 Class 로 만들어봤다. (코드는 아래와 같다.-python) import sys input = sys.stdin.readline class Stack: def __init__(self): self.stack = [] def __len__(self): # 스택의 길이(크기) return len(self.stack) def push(self, item):# 스택에 item 집어넣기 self.stack.append(item) def pop(self):# 스택의 가장 위에 있는 원소 빼내기 if..

[백준/알고리즘/python/java] 11399번 - ATM

최소값을 구하려면 우선, 시간을 오름차순으로 나열하는 것이 관건이다. 처음에는 map 함수를 통해서 여러개의 값을 받는 것을 list화 시켜서 정렬(sort)을 해야 하는데, 사용자에게 여러개의 값을 입력받을 때 number 값을 이용하는 줄 알고 애를 먹었다. 자바같은 언어에서는 보통 number 같은 변수를 입력 받아 for문을 돌면서 배열에 값을 넣어주기 때문이다. 하지만, 사용자에게 입력 받은 number는 나중에 값을 하나씩 더할 때 사용되는 것이고, 사용자에게 차례로 입력받은 값을 리스트에 넣으려면 그냥 map함수를 list() 해주면 됐다. 그리고 정렬을 할 때는 맨 처음에 애를 먹었던 것이 number = int(input()) time_list = map(int, input().split..

[백준/알고리즘/python/java] 1978번 - 소수 찾기

소수 찾기는 기본 알고리즘을 공부할 때, 자주 접했던 문제이다. 사용자에게 개수를 입력받고 다음줄에 개수만큼 숫자들을 차례로 입력한다. 그 숫자들이 소수인지 소수가 아닌지 판별하기 위해서는 그 숫자를 2부터 그 숫자까지로 나눠봐야 알 수 있다. 그런데, 예를 들어 21 이라는 숫자를 가정해보자. 21의 약수는 1,3,7,21 이다. 지금의 경우에야 21을 3으로 나누면 나누어 떨어지므로 반복문을 돌 때 break 구문을 만나 탈출 할 것이다. 다른 문제에서는 이 숫자를 굳이 21까지 나눌 필요는 없다는 뜻이다. 어차피 약수는 서로 양끝의 숫자들이 차례로 쌍을 이루어 곱한 값이 그 수를 이룬다. 그렇다면, 해당 숫자의 제곱근 까지만 반복문을 돌아도 상관없어지게 된다. 이런 알고리즘은 약수의 개수가 몇 개인..

[백준/알고리즘/python/java] 2839번 - 설탕 배달

어떤 수가 주어질 때, 그 수가 5로 나누어 떨어지는 수 라면 5로 하나씩 빼고 3으로 나누어 떨어지는 수라면 3을 하나씩 빼면 될 것 같았다. 약간 그리디 알고리즘처럼 말이다. 하지만, 예외가 있었다. (처음 풀었던 python 코드) n = int(input()) cnt = 0 while(n != 0): if(n % 5 == 0): n -= 5 cnt += 1 elif(n % 3 == 0): n -= 3 cnt += 1 else: cnt = -1 break print(cnt) 하지만, 위 코드처럼 풀면, 8이라는 수는 2가 나와야 정상인데, -1을 출력하고 만다. 다시 고민해봤다. (두번 째로 고친 python 코드) n = int(input()) cnt = 0 while(n != 0): if(n %..

[백준/알고리즘/python/java] 2941번 - 크로아티아 알파벳

처음에는 시간초과가 났었던 문제이다. 알파벳을 기준으로 하지말고 기호를 기준으로 제어문을 나누었더니 시간초과문제가 해결되었다. (처음에 풀었던 코드-python) string = input() length = len(string) cnt = 0 idx = 0 while(idx != (length)): if(string[idx] == 'l'): if(string[idx+1] == 'j'): cnt += 1 idx += 2 else: cnt += 1 elif(string[idx] == 'n'): if(string[idx+1] == 'j'): cnt += 1 idx += 2 else: cnt += 1 idx += 1 elif(string[idx] == 'd'): if(string[idx+1] == 'z'): ..

반응형