분류 전체보기

처음 문제를 봤을 때 set이나 map을 사용해야 될 것 같긴 했는데 전반적인 풀이 방법이 떠오르지 않아 다른 사람 코드를 참고했습니다. 효율성을 따진다는 것 + 보석의 개수가 최대 10만 개라는 점에서 모든 경우를 다 탐색한다는 것은 시간 초과가 날 것이라 생각했고, 풀이를 보니 투 포인터를 사용하는 것이었습니다. 투 포인터 문제를 많이 풀어보지는 않았지만 보석 쇼핑과 같이 연속되는 데이터를 찾는 문제(?) 유형에 많이 사용되는 것 같습니다. 풀이 방법 map에 보석의 종류와 개수를 담아줍니다. 보석의 종류를 중복 없이 담기 위해서 set을 사용합니다. 아래와 같이 set을 선언하면 gems vector의 처음부터 끝까지 중복되지 않게 데이터를 set에 담아줍니다. 보석의 종류를 다 포함하는 최소의 e..
· Koala - 4기
정확성은 통과하는데, 효율성 테스트를 잘 통과하지 못하고 있습니다 ㅠ__ㅠ 살펴보니 효율성까지 통과하려면 맵 자료형(파이썬의 딕셔너리)을 활용해야 하는 것 같은데... import sys maxCount = sys.maxsize def checkGem(gemSet, gems): compSet = set(gems) if gemSet == compSet: return True return False def makeGemSet(gems): gemSet = set(gems) return gemSet def solution(gems): maxCount = sys.maxsize ansLeft = 0 ansRight = 0 gemSet = makeGemSet(gems) left, right = 0, 0 while T..
기본 틀은 짠돌이 호석과 비슷하게 풀었습니다. 짠돌이 호석 문제를 풀어봐서 그런지 딱 봤을 때 어떻게 접근을 해야 할지는 바로 보였던 것 같습니다. lock을 고정시킨 뒤에 key의 위치를 옮기고, 회전시키면서 정답이 나오는지(lock의 0 부분을 1로 다 채울 수 있는지) 체크해주었습니다. background에서 key의 배열을 더해주고 난 뒤(lock의 1과 key의 1이 겹치지 않고, key의 0과 lock의 0이 겹치지 않으면 무조건 1이 나오게 된다.), lock 부분에 0이 있거나 2가 있다면 정답이 될 수 없기 때문에 그런 경우 check 함수에서 바로 false를 return 합니다. 다른 부분보다 vector의 구조를 이번 문제처럼 사용해본 적이 없어서 background 선언 형식을 참..
· Koala - 4기
저번에 풀었던 짠돌이 호석과 같은 방법으로 접근했습니다. lock을 가운데에 놔두고 key를 4방향으로 돌려가며 모두 탐색했습니다. map의 크기는 N + 2M이면 될 것 같아 N + 2M으로 설정했습니다. 지난번과는 조금 다르게 check를 하는 부분에서 값을 더하고 check하고 빼주면서 확인했습니다. #include #include #include using namespace std; int N,M; vector map, key, lock; bool answer; void rotate(vector& key){ vector temp(M,vector(M)); for(int i = 0; i
· Koala - 4기
물류센터를 갔다와서 너무 피곤한 관계로 예상 풀이만 적어두고 나중에 풀어볼 생각입니다 ㅠ... 일단 최근에 풀었던 짠돌이 호석과 똑같은 풀이라고 생각합니다. https://www.acmicpc.net/problem/21277 21277번: 짠돌이 호석 DIY(Do It Yourself)는 호석이가 제일 좋아하는 컨텐츠이다. 이번 DIY는 동네 친구 하늘이랑 각자 직소 퍼즐을 하나씩 맞춰보기로 했다. 두 개의 퍼즐은 각자 N1 행 M1 열과 N2 행 M2 열의 격자 형태 www.acmicpc.net 짠돌이 호석은 입력이 50까지이고, 정사각형이 아닌 직사각형이 주어질 수 있고, 직사각형이므로 어떤 블럭을 기준으로 해야 할지 난감하고, 직사각형이므로 돌렸을 때 모양이 바뀌기도 하므로 지금 보니 오늘 풀어야 ..
· Koala - 4기
정말 오랜만에 문제를 해결한 것 같아 뿌듯하네요! 풀이는 다음과 같습니다. (자물쇠의 한 변의 크기는 M, 열쇠의 한 변의 크기는 N이라고 하겠습니다.) 1. 자물쇠를 이동시킬 수 있는 영역을 마련하기 위해 M + 2 * (N - 1) 크기의 배열을 생성합니다. def createExtendedMatrix(key, lock): M, N = len(key), len(lock) extended = [[0] * (M + 2 * (N - 1)) for _ in range(M + 2 * (N - 1))] for row in range(M - 1, M + N - 1): for col in range(M - 1, M + N - 1): extended[row][col] = lock[row - M + 1][col - M..
· Koala - 4기
이번 문제 또한 풀이를 참고하여 풀었습니다. 접근을 하려고 했던 방식은 틀리지 않았는데 동전 두 개의 좌표를 한꺼번에 bfs에 넣어야 된다는 것을 생각하지 못했습니다. 몇 문제 풀다 보니까 백트래킹에 대해서 알듯 말듯한 느낌입니다. 참고한 코드가 짧고 이해하기 편했던 것 같습니다. 풀이 방법 주석에도 간단하게 적어놓긴 했지만 몇 군데 포인트 되는 부분만 설명을 해보겠습니다. 1. 이동하려는 칸이 동전이어도 이동이 가능하기 때문에 입력을 받으면서 'o'일 경우 vector에 넣고, '.'로 바꾸어주었습니다. 2. coin[0]의 first는 1번째 동전의 x좌표, coin[0]의 second는 1번째 동전의 y좌표입니다. 마찬가지고 coin[1]의 first는 두 번째 동전의 x좌표, second는 두 번..
· Koala - 4기
보실 분이 있으실지는 모르겠지만 열심히 구상한 테스트케이스들입니다..! # k값과 문자열을 구성하는 알파벳 개수가 같을 때 제대로 출력되는지 확인, 1 5 antatica 답 : 1 # 문자열을 구성하는 알파벳 개수보다 k값이 작은 경우 제대로 출력되는지 확인, 1 4 antatica 답 : 0 # 문자열을 구성하는 알파벳 개수보다 k값이 큰 경우 제대로 출력되는지 확인, ★ 이거때매.. 1 10 antatica 답 : 1 # 제대로 쪼개졌는지 확인, 3 5 antatica antaaatica antaaaaatica 답 : 3 # a,i,t,n,c 제대로 빠지고 잘 작동하는지 확인 3 5 antaxxxxtica antaltica antaltica 답 :0 # 위와 같음 3 6 antaxxxxtica an..
· Koala - 4기
딱히 뚜렷한 방법이 생각이 나지 않았습니다.. 그래서 그냥 맨 처음 생각났던 '한번에 두개 해보자'로 풀기 시작했습니다. from sys import stdin input=stdin.readline dx,dy=[0,0,1,-1],[1,-1,0,0] n,m=map(int,input().split()) board=[list(input().rstrip()) for i in range(n)] vi1=[[0 for i in range(m)]for i in range(n)] vi2=[[0 for i in range(m)]for i in range(n)] coins=[] ans=11 for i in range(n): for j in range(m): if board[i][j]=='o': coins.append((j,..
· Koala - 4기
검사해야 할 것들은 주어진 좌표의 가로줄, 세로줄 그리고 스도쿠 판을 9개로 나누었을때 속해있는 그 칸의 9개의 나머지 블럭들 이 3가지입니다. 사실 그냥 시간을 전혀 신경쓰지않는다면 간단하게 정답을 구할 수 있지만 문제의 경우는 다음이라고 생각했습니다. # 이것만 오래 안걸리면 나머지 다 맞을듯 ''' 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ''' 위의 테스트 케이스만 빠르게 해결할 정도라면 문제를 맞추는 것은 어렵지 않다고 생각했고, 이것으로 계속 테스트를 ..
· Koala - 4기
백트래킹이 익숙하지 않아서 쉬운 문제랑 내주시는 문제 병행하면서 같이 풀어보고 있는데 아직은 어렵네요. 이번 문제는 다른 사람 풀이를 참고해서 풀었습니다! 풀이 방법 1. row, col, square 변수를 만들어서 각각의 숫자가 행, 열, 사각형에 존재하는지 체크합니다. 예시로 들자면 1행에 3이 존재하면 row[1][3] = true, 5열에 1이 존재한다면 col[5][1] = true이 되는 것입니다. 사각형도 마찬가지로 9x9 스도쿠를 가로 세로 3등분씩 하여 나눠진 사각형에서 0번째 사각형에 5가 존재한다면 square[0][5] = true가 되는 것입니다. 2. 재귀 종료 조건은 cnt가 81이 되는 것입니다. cnt가 81이 되면 sudoku 전체를 출력하고 프로그램을 종료합니다. 여기..
· Koala - 4기
https://www.acmicpc.net/problem/2239 2239번: 스도쿠 스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다 www.acmicpc.net 이 코드만 있으면 동아일보 스도쿠의 왕이 될 것 같네요! 풀이는 인터넷을 참고해 다음 순서대로 구현했습니다. 1. 값이 0인 지점에 숫자를 대입하고(방문 표시), 행 / 열 / 해당 지점이 속한 3 * 3 공간에 1 ~ 9가 모두 들어 있는지 검사합니다. 2. 만약 모든 검사를 통과했다면 다음 0을 찾아 1단계의 검사를 반복합니다. 3. 만약 검사에 걸렸다면, 해당 지점의 숫자를 다시 0으로..
KauKoala
'분류 전체보기' 카테고리의 글 목록 (130 Page)