본문 바로가기

코딩테스트

(39)
프로그래머스 level1 크레인 인형뽑기 게임 문제 설명 answer는 없어진 인형의 갯수고 stack은 바구니다. moves 배열의 크기만큼 for문을 반복하여 board에 인형이 없으면 continue로 스킵하고 있으면 해당 인형의 번호를 peek에 넣는다. 만약 바구니에 인형이 있다면 바구니의 가장 위에 있는 인형과 peek을 비교하여 같으면 pop을 하고 board의 값을 0으로 바꿔준다. 없으면 그대로 바구니에 넣고 board의 값을 0으로 바꿔준다. 전체 코드 def solution(board, moves): answer = 0 stack = [] for i in range(len(moves)): for j in range(len(board)): if(board[j][moves[i]-1] == 0): continue peek = board..
프로그래머스 level1 다트 게임 문제 설명 변수는 총 세 개로 설정했다. answer는 점수 합계, points는 점수를 저장해놓는 배열, num은 한 번 던질 때 얻은 점수다. for문을 사용하여 dartResult에서 값을 하나씩 빼와서 알파벳인지 확인한다. 알파벳이면 해당 알파벳이 S면 그대로 points에 append하고 D면 제곱을 하여 append하고 T면 세제곱을 하여 append 한다. 마지막으로는 num을 ''으로 초기화한다. dartResult에서 빼온 값이 숫자면 num에 덧붙여준다. 덧붙이는 이유는 한 자리 수만 있는게 아니라 10까지 있으므로 +=을 사용했다. dartResult에서 빼온 값이 알파벳도 아니고 숫자도 아닐 경우에는 해당 값이 *인지 #인지로 나누었다. *일 경우에는 또 두 가지 경우로 나누었는데 ..
프로그래머스 level1 실패율 문제 설명 rate는 실패율이 저장되어 있는 배열이고 counts는 해당 스테이지까지 도달하지 못한 유저의 수다. for문을 사용하여 1부터 전체 스테이지까지 돌고 if문을 사용하여 해당 스테이지에 도달한 유저가 있는지 체크한다. 그래서 있을 경우 해당 스테이지를 도전 중인 유저의 수 / 해당 스테이지를 클리어 한 유저의 수 를 rate에 append 하고 없을 경우에는 0을 append 한다. counts += stages.count(i)는 예를 들어 3번 스테이지까지 도달하지 못한 유저의 수는 1번 스테이지를 도전 중인 사람의 수 + 2번 스테이지를 도전 중인 사람의 수여서 저렇게 계산했다. 모든 실패율을 계산한 후 sort 함수를 사용하여 내림차순으로 정렬한다. sort_rate 함수의 값을 사용하..
프로그래머스 level1 키패드 누르기 문제 설명 입출력 예시 키패드를 좌표로 생각하여 문제를 접근했다. 키패드 1번은 [0,0] , 키패드 2번은 [0,1] ... 키패드 0번은 [3,1] 로 설정했다. 왼쪽 엄지손가락의 좌표인 left를 [3,0]으로 초기화하고 오른쪽 엄지손가락의 좌표인 right를 [3,2]로 초기화했다. 인자 numbers를 for문을 돌려서 i가 1,4,7일 경우 answer에 'L'을 추가하고 left 값을 바꾸고 i가 3,6,9일 경우 answer에 'R'을 추가하고 right 값을 바꿨다. i가 가운데 줄에 있는 번호 2,5,8,0일 경우 right의 좌표값과 left의 좌표값을 i의 좌표값과 비교하여 좌표값들의 차의 절댓값으로 거리를 계산했다. 전체 코드 def solution(numbers, hand): a..
백준 c++ 1697번 문제 설명 점에 대한 위치를 1차원 배열로 나타낸다. 수빈이의 위치를 N에 넣고 동생의 위치를 K에 넣는다. Q는 수빈이가 갈 수 있는 위치를 저장하는 큐다. 큐에서 값을 뺀 후 수빈이의 위치가 동생의 위치면 함수를 종료시킨다. 수빈이가 갈 수 있는 위치는 총 3가지인데 현재 거리로부터 +1, -1, *2 이다. 그래서 for문과 if문을 사용하여 경우의 수를 나누었다. 각각의 경우에 대한 예외처리를 해준 후 배열에 값을 1씩 더해준다. 전체 코드 #include #include #include using namespace std; int dist[100001]; int main() { ios::sync_with_stdio(0); cin.tie(0); int N, K; cin >> N >> K; queu..
백준 c++ 2178번 board는 미로의 크기를 나타내는 배열, vis는 해당 지점을 방문했는지 나타는 배열, length는 시작 지점에서부터 해당 지점까지의 거리를 나타낸다. n, m은 미로의 세로와 가로의 길이를 나타내고 한 줄씩 string 값을 입력받아 board에 저장한다. 첫번째 (0,0)을 큐에 넣고 vis[0][0]을 1로 바꾸고 이중for문을 사용하여 length 배열의 값들을 넣어준다. 마지막에 1을 더한 이유는 length에 저장되어 있는 값은 거리값이고 해당 문제에서 요구하는 것은 이동한 칸의 갯수이므로 +1을 해준다. 전체코드 #include #include #include using namespace std; #define X first #define Y second int board[101][101..
백준 c++ 1926번 board는 도화지의 크기를 나타내고 vis는 해당 위치를 방문했는지 나타내고 width에는 각각 그림의 크기를 저장해놓는다. 도화지의 세로 크기와 가로 크기 n, m을 입력 받고 도화지에 그림의 정보를 입력한다. 이중 for문을 통해 도화지에 그림이 있는지 확인하고 만약 해당 위치에 방문하지 않았고 도화지에 그림이 있다면 if문으로 들어가 방문했다고 표시를 한 후 큐에 해당 위치를 넣고 count 값을 1 더한다. 그러고 해당 위치로부터 상,하,좌,우 연결된 그림이 있는지 확인한다. 마지막으로 width 배열을 내림차순으로 정렬한 후 가장 큰 width[0]을 출력한다. 전체 코드 #include #include #include using namespace std; #define X first #def..