algorithm
[python] SWEA - 6959. 이상한 나라의 덧셈게임 / 6485. 삼성시의 버스 노선
1. 이상한 나라의 덧셈게임 문제 해결 D4 | 수학? 1. 무언가 규칙이 있을 것만 같은 문제이다. 2. "서로 최선을 다해 게임을 한다고 할 때" 여기에서 많은 고민을 했을 것이다. 최적의 방법을 생각하기 위해 3. 하지만 그런거 없다. 숫자가 정해진 순간 어떻게 하던지 답은 정해져 있다. 4. 스택을 만들어 숫자를 하나하나 넣는다. 5. 숫자를 두개씩 꺼내어 더해준다. 6. 더해진 숫자가 두자리이면 쪼개서, 한자리이면 그대로 다시 스택에 넣어준다. 이 때 카운트를 하나씩 세어준다. 7. 스택에 남은 숫자가 1개가 될 때까지 반복한다. 8. 카운트가 짝수이면 B의 승리, 홀수이면 A의 승리 🌦 여러가지 경우의 수를 따져 본 결과 어떤 순서로 하던지 결과는 바뀌지 않는다. 소스 코드 for tc in ..
[python] SWEA - 7701. 염라대왕의 이름 정렬
문제 해결 1. D4 - 정렬 2. sorted를 사용하면 쉽게 해결할 수있다 3. 먼저 이름의 길이순으로 정렬하고 4. 두번째로 이름의 길이가 같을 때 이름의 알파벳 순서대로 정렬한다. ✌ sorted() 함수에 대해서 알아보자. sorted 함수는 배열을 정렬하는 기능을 가지고 있다. 이 함수를 기본값으로 쓰게 되면 정렬된 배열을 반환한다. a = [6, 3, 4] b = sorted(a) # 첫번째 인자로 정렬할 리스트를 넣어준다. print(b) # [3, 4, 6] sorted의 두번째 인자로는 정렬하는 방법을 설정할 수 있다. 기본값으로는 우리가 흔히 알고 있는 1,2,3 a,b,c 오름차순 정렬이다. a = [(1,5), (2, 4), (2, 3)] print(a) # [(1, 5), (2,..
[JavaScript] 프로그래머스 - 베스트앨범
문제 해결 1. 해시 2. 주어진 genres와 plays를 객체 형태로 만든다. (1) ex) { 장르이름: { 총 재생 횟수: 500, 노래들: [[200, 1], [300, 5]] } 3. 만들어진 객체를 총 재생 횟수로 내림차순 정렬한다. 4. 각각의 장르에서 노래를 두개씩 뽑아 answer 에 넣는다. (1) 각각의 장르에서 노래들을 꺼내 내림차순 정렬한다. (2) 그 때 재생횟수가 같다면 인덱스로 오름차순 정렬한다. (3) 정렬 후 노래를 두개 꺼내 answer 에 넣는다 (4) 만약 노래가 하나라면 정렬하지 않고 그냥 넣는다. ( 두개 일 경우에도 정렬은 필요 없으나 노래가 하나인지 그 이상인지가 중요하므로) 🌤 문제를 풀어 본 후 여러가지 풀이를 찾았다. 자바스크립트를 공부하는 목적은 알고..
[python] SWEA - 5432. 쇠막대기 자르기
문제 해결 1. D4 | 큐, 스택 2. 주어진 인풋값을 차례로 하나씩 큐에 넣을 준비를 한다. 3. '(' 이면 큐에 넣는다. 4. ')' 일 때 (1) 이전에 '(' 이 나왔다면 레이저이므로 잘라준다. - 이 때 큐 안에 있는 갯수 만큼 조각이 나온다. (2) 이전에 ')' 이 나왔다면 끝부분이다. 큐 안에서 시작부분을 하나 꺼내주고 조각 갯수를 +1한다. 💨 전에 풀어 봤던 느낌이 나는 문제이다. 큐스택을 활용해 조건에 맞게 꺼내주고 빼주고 하면 된다. 소스 코드 from _collections import deque for tc in range(1, 1+int(input())): iron_bar = input() q = deque() cnt = 0 for i in range(len(iron_bar..
[python] SWEA - 4613. 러시아 국기 같은 깃발
문제 해결 1. D4 | 경우의 수 2. 각 라인에서 화이트, 블루, 레드 각각의 색으로 바꿀 때 필요한 횟수를 리스트 형태로 저장한다. (2중 배열) 3. 화이트와 블루로 색칠할 라인 수를 정하면 레드는 저절로 정해진다. 화이트와 레드는 0부터, 블루는 1부터 4. 색칠할 라인수를 정했으면 2번에서 저장한 지정한 색으로 바꿀 때 필요한 횟수를 더해준다. 5. 여러가지 경우의 수가 나오므로 min을 활용해 최소값을 찾아준다. 6. 최솟값을 찾았으면 마지막에 맨 윗줄을 화이트로 바꾸고, 맨 아랫줄을 레드로 바꾸는 횟수도 더해준다. 💨 3가지 경우 밖에 없어 포문으로 모든 경우의 수를 구해줬다. 경우의 수를 찾는 방법이 중요한 것 같았다. 소스 코드 for tc in range(1, 1 + int(input..
[python] SWEA - 3752. 가능한 시험 점수
문제 해결 1. D4 | DP 2. 얻을 수 있는 최대점수를 길이로 하는 리스트를 만든다 3. 리스트안의 값은 내가 점수를 얻을 수 있으면 1, 없으면 0으로 한다 4. 점수를 하나씩 받아서 리스트를 뒤에서부터 탐색한다 (1) 1을 만나면(내가 이미 얻을 수 있는 점수 ex. lst[3] == 1 이면 3점은 이미 얻을 수 있는 점수이다.) 내가 꺼낸 점수를 더해서 그 지점을 1로 만들어준다.(ex. score == 2 이면 lst[5] = 1) 5. 리스트에서 1의 갯수를 세어주면 정답. 💨 풀이 예시] 새로 받는 점수는 2, 3, 5이다. 얻을 수 있는 점수는 리스트는 lst = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 이렇게 구성한다. (0점은 처음부터 가능하므로 0번 인덱스의 ..