본문 바로가기

BOJ

(223)
[BOJ] 1181. 단어 정렬 *정렬 조건을 두 개로 정한다. lambda로 단어의 길이 / 단어 사전순 오름차순으로 정렬하도록 한다. import operator n = int(input()) word = {} for _ in range(n): tmp = input() word[tmp] = len(tmp) sortWord = sorted(word.items(), key=lambda x : (x[1],x[0])) for i in sortWord: print(i[0])
[BOJ] 1475. 방 번호 *9는 6으로 치환해서 계산 *6의 개수는 2로 나눠서 반올림 한 만큼 저장한다. *digit 중 가장 큰 개수만큼 산다. import math num = input() digit = [0,0,0,0,0,0,0,0,0] for i in num: if (i == '9'): digit[6] += 1 else: digit[int(i)] += 1 #6,9는 각각 더해서 나누기 2한 값이 들어간다. digit[6] = math.ceil(digit[6]/2) max = 0 for i in digit: if (max < i) : max = i print(max)
[BOJ] 4949. 균형잡힌 세상 *리스트를 스택처럼 사용 *예시 마지막에 [.] 도 yes이다. -> 끝내는 단어로 처리하면 안된다. while True: tmp = input() if(len(tmp) == 1 and tmp == '.'): break word =list(map(str, tmp.split())) stack = [] flag = True for i in word: if (i.find('(') != -1 or i.find('[') != -1 or i.find(')')!= -1 or i.find(']')!= -1): for j in range(len(i)) : if (i[j] == '(' or i[j] == '[') : stack.append(i[j]) elif(i[j] == ')') : if (len(stack) == 0)..
[BOJ] 2151. 거울설치 + TC *거울이 [\] [/] 이 두 방향으로 있다고 생각하고 풀어야 한다. 처음에는 45도이기 때문에 [/] 만 생각하고 풀었다가 아니라는 것을 알게 됐다. *처음 [#] 좌표에서 출발해서 4방향 모두 큐에 넣는다. *각 방향으로 한 칸 앞으로 전진한 좌표가 거울이면 방향을 바꾸어서 큐에 넣고, 방향을 바꾸지 않는 상태로도 큐에 넣는다. 이 좌표에 거울을 설치하지 않는 경우도 생각한다. 3 ... *!# #!! 이 예시를 보면 (1, 3)에서 출발해서 (3,1)로 가야하는데 남쪽 방향으로 (3,3)의 거울로 간 후, 방향을 한 번 바꾸면 바로 (3,1)에 접근가능하다. #include #include #include #include #include #define INF 987654321 using namesp..
[BOJ] 9376. 탈옥 *세 지점에서 bfs를 실행한다. 상근이(0,0) / 죄수 2명 *상근이는 건물 밖을 마음대로 나다닐 수 있기 때문에 맵의 크기를 0,0~h+1, w+1으로 잡아줘야 한다. *상근이를 포함한 각 죄수들이 건물 밖으로 향하는데 여는 문의 개수를 dist[][]에 저장한다. *각 죄수들이 문을 열고 나가도록 코드를 작성하지만 실제로는 상근이가 두 죄수를 데리고 가기 때문에 세 명 다 문을 열 수 있는 가능성을 없애줘야 한다. (정답으로 요구한 것은 최소값이기 때문에) #include #include #include #include #include /* BOJ 9476.탈옥 */ using namespace std; int h, w; char map[102][102]; typedef pair pp; typed..
[BOJ] 12094. 2048(Hard) *2048(easy)와 풀이단계는 비슷하지만, 가지치기를 해줘야 한다. (최대 횟수가 2배로 늘었기 때문에) -가지치기 1) 변경된 맵이 변경되기 이전의 맵과 동일한 경우 -> 이 방향으로는 더 이상 나아가지 않는다. 2) 맵에서 최대값을 찾을때, 최대값은 2승씩 커진다. (cnt==10 이라면 가장 최대값은 1024가 될 것이다. ) 이 특징을 이용해서 현재 depth에서 최대값에 도달할 수 있는 지 확인한다. (즉, 한 번 10번까지 변경된 맵에서 최대값을 추출한 후 maxBlock[10] = 1024 / maxBlock[9] = 512 .... 이런 식으로 미리 저장을 해 놓는다.) *실제 최대값은 1024가 아닐 수 있다. 3) 현재 맵에서 구한 최대값이 현재 depth(==cnt)에서 나와야 하..
[BOJ] 16638. 괄호 추가하기2 *괄호 추가하기1에서 연산자 우선순위만 추가 (계산 단계 하나만 추가됐다) *숫자 자리수를 계산하기 번거로와서 string으로 처리함 2019/10/08 - [BOJ/C++] - [BOJ] 괄호추가하기 [BOJ] 괄호추가하기 문제 길이가 N인 수식이 있다. 수식은 0보다 크거나 같고, 9보다 작거나 같은 정수와 연산자(+, -, ×)로 이루어져 있다. 연산자 우선순위는 모두 동일하기 때문에, 수식을 계산할 때는 왼쪽에서부터 순서대.. jayrightthere.tistory.com *단계 1) 괄호 추가 (addd) - added[i] = true 인 부분은 괄호에 속하는 숫자들이다. - 괄호 안에 연산자는 하나만 들어갈 수 있기 때문에 연산자를 기준으로 i와 i+2를 검사한다. 2) added[i] ==..
[BOJ] 16988. Baaaaaaaaaduk2 (Easy) *조합을 이용하여 2개의 빈칸 좌표에 내 돌(1)을 놓은 후, 죽일 수 있는 상대 돌의 최대값을 계산한다. *죽일 수 있는 상대 돌 그룹은 내 돌(1)로 둘러싸여져 있어야 한다. 하지만 그것을 증명하는 것보다는 돌 그룹의 상하좌우에 빈칸(0)이 있으면 그 돌 그룹은 죽을 수 없다고 간주하는 것이 더 구현하기 쉽다. #include #include #include #include using namespace std; int n, m, ans = 0; int map[21][21]; typedef pair pp; vector emt, enemy; int emtCnt = 0; bool visited[500], chk[21][21]; int dx[4] = { -1,1,0,0 }, dy[4] = { 0,0,-1,1..