본문 바로가기

코딩 테스트/Lv.1

(10)
[프로그래머스] 실패율 with Kotlin 문제 게임 스테이지 별 실패율을 구해 내림차순 정렬하여 실패율이 높은 스테이지 순서대로 반환하는 문제 풀이 과정 실패율 = 도달했으나 성공하지 못한 플레이어 수 / 도달한 플레이어 수 Map에 스테이지 별 실패율을 넣어 저장 values를 기준으로 내림차순 정렬 이후 key값 반환 코드 class Solution { fun solution(N: Int, stages: IntArray): IntArray { var answer = IntArray(N) val stage = HashMap() // 스테이지 별 실패율 저장 for(i in 1 .. N){ var failPercent = 0.0 val a = stages.count{it==i}.toDouble() val b = stages.count{it >=..
[프로그래머스] 둘만의 암호 with Kotlin 문제 문자열 s가 주어졌을 때, s의 각각의 문자를 index만큼 증가시켜주는 문제 만일 사이에 skip 문자가 포함되어있다면 건너뛰고 증가 s가 "abc" 이고 index가 1이라면 "bcd" 이며, 만일 skip : "d" 라면 d를 건너뛴 "bce" 풀이 방법 1. 아스키코드 이용 2. inc() 메서드를 이용 저는 1번으로 풀었습니다. 코드 class Solution { fun solution(s: String, skip: String, index: Int): String { var answer = "" // a : 97 z : 122 .toChar() for(i in s){ var asc = i.toInt() var count = 0 while(count < index){ asc += 1 // ..
[프로그래머스] 크레인 인형뽑기 게임 문제 인형뽑기를 하여 뽑은 인형을 1자형 바구니에 담을 때 같은 인형이 연속으로 있으면 터지며, 몇 개의 인형이 터졌는지 반환하는 문제 풀이 과정 2차원 배열로 주어진 인형뽑기 기계의 인형들( board[x][y] )에서 y축이 크레인의 위치, x축이 크레인이 인형을 뽑으러 내려가는 길 뽑은 인형 자리는 0으로 바꿔주고 뽑은 인형은 스택에 담아 준다. 만약 스택에 연속으로 같은 숫자가 있다면 answer+=2 이후 펑 코드 import java.util.* class Solution { fun solution(board: Array, moves: IntArray): Int { var answer = 0 //Stack val bucket = Stack() for(y in moves){ for(x in bo..
[프로그래머스] 키패드 누르기 with Kotlin 문제 숫자 버튼을 어느쪽 손가락으로 누르는지 배열에 담아 반환하는 문제 1 2 3 4 5 6 7 8 9 * 0 # 조건 시작할 때 왼손은 *에 오른손은 #에 위치 1, 4, 7은 왼손으로 3, 6, 9 는 오른손으로 가운데 열은 손가락이 더 가까운 쪽으로 누른다. 만일 가운데 열 중 양 손의 거리가 같다면, 왼손잡이는 왼손으로 오른손잡이는 오른손으로 누른다. 풀이 과정 1. 키패드를 2차원 배열로 초기화 2. 각 번호의 좌표를 Map에 담는다. 3. 현재 양 손의 위치를 담는 변수 선언 4. 조건에 맞춰 누른 손가락을 담아주면 된다. 코드 import kotlin.math.abs class Solution { fun solution(numbers: IntArray, hand: String): String..
[프로그래머스] 햄버거 만들기 with Kotlin 문제 햄버거 = 빵(1) - 야채(2) - 고기(3) - 빵(1) 재료의 정보를 나타내는 정수 배열 ingredient 가 주어졌을 때, 상수가 포장하는 햄버거의 개수 구하기 풀이 과정 재료를 순차적으로 하나하나 담다가 1231이 나열되면 카운팅하며, 1231 삭제 코드 class Solution { fun solution(ingredient: IntArray): Int { var answer: Int = 0 val sb = StringBuilder() for (item in ingredient) { sb.append(item) //하나하나 담기 if (sb.length >= 4 && sb.substring(sb.length - 4) == "1231") { //1231이 오면 sb.setLength(sb..
[프로그래머스] 바탕화면 정리 with Kotlin 문제 바탕화면 아이콘("#")을 최소로 드래그할 수 있는 S좌표부터 E좌표의 값을 각각 배열에 넣어 반환하는 문제 풀이 과정 S는 기존 배열의 인덱스와 같다. E는 기존 배열의 인덱스 + 1 이다. S는 "#"이 들어있는 인덱스 중 x가 가장 적은 인덱스의 x와 y가 가장 적은 인덱스의 y를 조합 E는 반대 코드 import kotlin.math.* class Solution { fun solution(wallpaper: Array): IntArray { val saveX = ArrayList() val saveY = ArrayList() for(x in wallpaper.indices){ for(y in wallpaper[x].indices){ if(wallpaper[x][y] == '#') { sav..
[프로그래머스] 신고 결과 받기 with Python 문제 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다. 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다. 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다. k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다. 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다. 신고자에게 정지당한 유저에 대한 메일 발송 횟수를 리스트에 담아 반환하는 문제 풀이 과정 제한시간이 주어졌으므로 리스트보다는 시간복잡도가 낮은 딕셔너리 사용 신고 중복은 set으로 해결 각 id 별 신고 당한 횟수 저장 K번 이상 신고 당한 사람이 있으면..
[프로그래머스] 달리기 경주 with Python 문제 처음 배열로 선수 리스트가 주어지고, 한 선수가 앞 선수를 추월할 때마다 해설진들에게 호명되며 최종적으로 결승에 들어온 순서대로 선수 리스트를 반환하면 되는 문제 풀이 과정 1. 첫 번째 풀이 def switch(players, index): save = players[index] #호명 된 선수 players[index] = players[index-1] players[index-1] = save return players def solution(players, callings): for calling in callings: players = switch(players, players.index(calling)) return players for 문을 이용하여 호명된 선수를 바꿔주는 방식으로 해결..
[프로그래머스] 개인 정보 수집 유효기간 with Python 문제 - 모든 달은 28일까지 있으며, 약관마다 개인정보 보관 유효기간이 정해져 있고 유효기간이 지나면 파기해야한다. - - today는 문자열, terms(약관 및 유효기간)는 리스트, privacies(개인정보 수집일자 및 약관)도 리스트 - 다음과 같이 문제 풀이에 필요한 정보가 주어지며 개인정보를 파기해야 할 privacies 리스트 인덱스 번호 +1 을 리스트로 반환하면 되는 문제 풀이 과정 모든 달은 28일로 고정되어 있음으로 개인정보 수집일자에 해당하는 달에 유효기간을 더한 뒤 날짜만 하루 빼주면 파기 날짜이므로 금월에 유효기간을 더한 뒤 12월을 넘어가면 +1년 이후 금일에 -1을 해준 뒤 만약 일수가 0일이면 28일로 변경 후 월도 -1 월도 0월이면 12월로 변경 후 년도 -1 코드 d..
[프로그래머스] 신규 아이디 추천 with Python 문제 카카오 아이디 규칙 1. 아이디의 길이는 3자 이상 15자 이하여야 합니다. 2. 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다. 3. 단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다. 순차적 처리 과정 1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다. 2단계 new_id에서 알파벳 소문자, 숫자, 빼기( - ), 밑줄( _ ), 마침표( . )를 제외한 모든 문자를 제거합니다. 3단계 new_id에서 마침표( . )가 2번 이상 연속된 부분을 하나의 마침표( . )로 치환합니다. 4단계 new_id에서 마침표( . )가 처음이나 끝에 위치한다면 제거합니다. 5단계 new_id가 빈 문자열이라면, ..