목록맵 (8)
N
https://programmers.co.kr/learn/courses/30/lessons/84325 코딩테스트 연습 - 4주차 개발자가 사용하는 언어와 언어 선호도를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다. 아래 표는 5개 직업군 별로 많이 사용하는 5개 언어에 직업군 언어 점수를 부 programmers.co.kr 맵을 활용한 문제 풀이. 우선 table에 있는 문자열을 모두 토크 나이징 한다. 토크 나이징 한 값을 v 벡터에 저장하고, 해당 직군에 따른 언어 점수를 lang 맵에 저장하도록 한다. 5점 ~ 1점 순서로, v 벡터 안에 있는 언어를 key, 점수를 value로 lang에 저장. lang 맵을 다시 jobs 맵에 저장하는데, key는 v[0]에 해당하는 직군..
문제 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 몇 개 가지고 있는 숫자 카드인지 구해야 할 M개의 정수가 주어지며, 이 수는 공백으로 구분되어져 있다. 이 수도 -10,000,000보다 크거나 같고, 10,0..
programmers.co.kr/learn/courses/30/lessons/1844 코딩테스트 연습 - 게임 맵 최단거리 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1 programmers.co.kr BFS를 이용해 맵의 최단 거리를 구하는 문제. 상하좌우를 이동하는데 조건을 검사하면서 진행하면 된다. 이동하려는 좌표가 벽이 아니고, 맵의 크기를 벗어나지 않으며 방문하지 않은 곳을 큐에 넣어준다. 만약 다음 좌표가 목적지라면 바로 리턴하여 최단 거리를 구한다. 큐가 빌 때까지 목적지에 도착 못하는 경우는 갈 수 없는 경..
문제 총 N개의 문자열로 이루어진 집합 S가 주어진다. 입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어진다. 입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있으며, 길이는 500을 넘지 않는다. 집합 S에 같은 문자열이 여러 번 주어지는 경우는 없다. 출력 첫째 줄에 M개의 문자열 중에 총 몇 개가 집합 S에 포함되어 있는지 출력한다. N개의 문자열은 집합 S에 포함되는 문자열이다. 그렇기 때문에 map을 이..

큐와 맵을 이용하여 문제를 푼다. 우선 string을 담을 수 있는 큐인 q와 map m을 선언한다. 그리고 보석 종류의 개수를 구하기 위한 gems_size, 진열대 시작 번호 start, 진열대 마지막 번호 end, 시작 지점 바꿔주기 위한 tmp를 0으로 초기화한다. 이제 보석 종류의 개수를 구하도록 한다. for문을 통해 gems를 순회하면서 m에 넣어주도록 한다. gems_size = m.size()로 하여 개수를 저장하고, m은 clear하여 비워주도록 한다. 다시 gems를 순회하면서 정답을 알아내면 된다. m을 초기화 하였으니 m[gems[i]] == 0이면 1을 넣어주고, 0이 아니라면 같은 보석이 이미 있는 경우이므로 해당 보석의 개수를 +1로 해준다. 그리고 q에 push. 모든 종류..
조건이 까다로운 문제였다... 우선 문자열에서 #이 붙은 음을 다른 문자로 치환을 하여야 한다. 이 부분이 첫번째 난관이다. 본인은 맵을 이용하여 다른 문자로 치환하였다. C#, D#, F#, G#, A#을 겹치지 않은 문자로 맵에 넣어주었다. 그리고 change() 함수를 따로 정의해서 musicinfos에 들어있는 멜로디와 m의 문자열을 #을 없앤 문자로 바꿔주었다. change함수는 별로 어렵지 않으니 쉽게 따라갈 수 있을 것이다..! 이제 musicinfos를 분해해야 한다..! 우선 시간을 나눠야 한다. bHour = 재생 시작된 시, bMin = 재생 시작된 분, aHour = 재생 끝난 시, bMin = 재생 끝난 분, time = 재생된 시간(분), bTime = 이전 곡의 재생된 시간(분..
주어진 문자열을 나누고, 맵을 이용하는 것이 핵심인 문제..! 우선 유저가 어떤 상태인지 확인하는 state 벡터를 선언하고, 해당 유저의 닉네임을 확인하기 위해 형 map인 user를 선언하였다. (state는 Enter, Leave, Change) record의 크기만큼 for문을 돈다. 우선 record[i]를 tokenize 하여 문자열을 나누도록 한다. 문자열을 나눈 결과를 str[3]에 각각 (state, id, nickname)을 저장하도록 하였다. str[0]을 확인하여 Enter인 경우 state에 "님이 들어왔습니다."를 넣어주고, 해당 id의 닉네임을 주도록 한다. Leave인 경우 "님이 나갔습니다."를 state에 넣어주도록 한다. 마지막으로 Change인 경우 해당 id의 nic..

옷의 모든 조합을 구하여 문제를 푸는 방식이다. 우선 맵을 이용하여 의상의 종류에 따른 개수를 구하였다. clothes[i][1]는 의상의 종류를 나타내므로 맵의 KEY 값이 된다. 그렇다면 해당하는 KEY의 값을 +1 씩 해주어서 종류에 따른 의상의 개수를 구하였다. 맵을 순회하면서 각각의 VALUE + 1 을 answer에 곱하여 마지막에는 answer - 1을 하여 반환해주면 된다. -1을 하는 이유는 모든 옷을 안입는 경우는 존재하지 않기 때문이다. 예를들어 옷의 종류가 A, B, C라고 하자. A 옷의 개수 : n(A) B 옷의 개수 : n(B) C 옷의 개수 : n(C) 그리고 해당 옷을 안입는 경우를 고려하여 각각 + 1을 해주도록 한다. 결국 (n(A) + 1) * (n(B) + 1) * ..