| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- Backjoon
- SSAFY
- 알고리즘
- 카카오
- 완전탐색
- 자바스크립트
- sort
- 힙큐
- Blind
- Python
- 스택
- 프로그래머스
- 삼성
- kakao
- 다이나믹프로그래밍
- algorithm
- SW역량테스트
- boj
- javascript
- 자료구조
- DFS
- 파이썬
- BFS
- 코딩테스트
- 백준
- 코테
- SWEA
- 그래프
- DP
- 싸피
- Today
- Total
목록Algorithm Problem (236)
맞왜틀
문제 해결 1. 키패드 모양대로 2차원 배열과 현재 왼손의 위치, 오른손의 위치, 누른 손을 누적할 변수를 생성 2. 1,4,7은 왼손, 3,6,9는 오른손을 사용하여 누르고, 그 위치로 이동한다. 3. 2,5,8,0의 경우 누를 번호에서 현재 양손의 위치까지의 거리를 구해서 거리가 짧은 쪽을, 거리가 같을 경우 어느손잡이인지에 따라 그 손으로 누르고 이동한다. (1) 눌러야할 번호의 위치를 구하고 BFS 탐색을 한다. (2) 현재 손까지의 거리를 구한다. (3) 양손까지의 거리를 비교한다. 😂 난이도는 카카오 코테 Lv1. 다른 분의 풀이를 보면 1차원 배열에서 숫자는 인덱스로, 위치는 튜플 형태로 값으로 넣어서 푼다. ex) 2차원 배열 상에서0번의 위치는 3,1이고 , 1번의 위치는 0,0이다. 그..
1. 수식 최대화 문제 해결 1. 먼저 주어진 수식을 숫자와 연산자로 구분하여 분리 (1) 빈 배열과 숫자를 자리수마다 하나씩 쌓아 놓을 변수를 만들고 (2) 주어진 수식을 for 문을 돌린다. (3) 숫자가 나오면 | ex) 350일 경우 > tmp에 3을 더하고, 5를 더하고 0을 더해서 tmp='350' 을 만든다 (4) 연산자가 나올 경우 만들어 놓은 숫자(tmp)와 연산자를 차례로 배열에 추가 한다. tmp는 다시 초기화 (5) 3,4번을 반복하고 마지막 숫자는 다음에 올 연산자가 없으므로 끝날 때 배열에 추가해준다. 2. 연산자 우선순위 구해서 계산하기 (1) 연산자 3가지를 만들고, 퍼뮤테이션 함수를 이용해 연산자 3가지에 대한 순열을 생성 (2) 만들어 놓은 수식 배열은 여러번 계산(연산자..
1. 원재의 메모리 복구하기 문제 해결 1. 인덱스 다루기. D3 2. for문으로 처음부터 끝까지 차례차례 검사한다. 3. 초기 메모리 값(init) 과 복구할 메모리 (n) 의 값을 차례차례 비교하며 4. 값이 다를 경우 다른 지점부터 끝까지 n의 값을 바꿔준다. 5. 이 때 카운트를 하나 씩 더해준다. 🌞 소스 코드 T = int(input()) for tc in range(1, T+1): init = list(input()) n = ['0']*len(init) cnt = 0 for i in range(len(n)): if n[i] != init[i]: n[i:] = init[i]*len(n[i:]) cnt += 1 print('#{} {}'.format(tc, cnt)) 출처: SW Expert ..
1. 숫자 배열 회전 문제 해결 1. 2차원 배열 다루기. D2 2. 90도로 회전시키는 것만 코드를 완성하면 나머지는 90도 돌린것을 또 돌리면 된다. 3. 이번에 푼 방법은 1행에 있는 모든 값을 임시배열에 넣어두고 거꾸로 해준다음 하나씩 쌓아준다. 🌧 이것 말고도 많은 방법이 있는 것으로 기억한다. 😶 소스 코드 T = int(input()) for tc in range(1, 1+T): n = int(input()) lst = [input().split() for _ in range(n)] # 90 도 회전 lst_90 = [] for j in range(n): tmp = [] for i in range(n): tmp.append(lst[i][j]) tmp.reverse() lst_90.append..
1. 간단한 압축 풀기 문제 해결 1. 문자열 인덱싱 하기. D2 2. 하나의 변수를 만들고 알파벳과 그 알파벳의 갯수만큼 문자열로 더해준다. 3. 너비가 10이므로 변수를 길이가 10만큼씩 잘라서 출력해준다. 🌧 2번과 3번을 동시에 할 수도 있을 것 같다😶 소스 코드 T = int(input()) for tc in range(1, 1+T): n = int(input()) document = '' for _ in range(n): word, number = input().split() document += word*int(number) print('#{}'.format(tc)) for i in range(0, len(document), 10): print(document[i:i+10]) 출처: SW E..
문제 해결 1. 스택을 활용한 문제. S3 2. '(' 가 나오면 막대기의 시작점이라 생각하고 stack 에 쌓는다. 3. ')' 이 나왔을 때 두가지의 경우 (1) 이전에 '(' 가 나온 경우: 쇠막대기가 아니라 레이저 이므로 잘라준다. (2) 이전에 ')' 가 나온 경우: 쇠막대기의 끝 부분 이다. 4. 레이저로 자른경우는 stack 에 쌓여있는 막대기만큼 count를 더해준다. 5. 쇠막대기의 끝부분이 나온경우 막대히 하나만큼 count를 더해준다. 🚗 소스 코드 bars = input() stack = [] cnt = 0 # '('를 막대기의 시작점으로 주고 '()' 이렇게 여는괄호와 닫는괄호가 연속으로 나오면 레이저로 취급한다. for i in range(len(bars)): if bars[i]..