본문 바로가기

알고리즘133

[백준- 1018 체스판 다시 칠하기][파이썬] -13일차 https://www.acmicpc.net/problem/1018 --풀이 어렵고 좋은 문제라 꼭 다시 풀어보자! 1. 8 X 8 범위만큼 x 와 y for문으로 나타내기 9*9 = (9-7) * (9-7) 로 4 10*10=(10-7)*(10-7)로 9 2. 규칙 찾기 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 두 좌표를 더한다 0(W) 1(B) 2(W) 3(B) 1(B) 2(W) 3(B) 4(W) 2(W) 3(B) 4(W) 5(B) 3(B) 4(W) 5(B) 6(W) 좌측 상단의 색 기준으로 짝수와 홀수가 일정한 규칙을 가지게 된다 그래서 짝과 홀을 if문으로 나누어주었고, W,B 기준으로 cnt를 달리해 주었다 3. min값 최.. 2022. 6. 7.
[프로그래머스 -[1차] 뉴스 클러스터링][파이썬] -12일차 https://programmers.co.kr/learn/challenges --풀이 key point: 자료 잔처리, Counter 1. 자료 잔처리 처음에는 9번~14번의 for문을 str1_1[i:i+2] 이런 식으로 접근했는데, if 조건이 첫 인덱스(각 문자열의 첫번째 문자)에만 걸리게 되어서, 각각을 비교하고 합쳐서 append 하는 형식으로 바꿨다. 특수문자와 숫자 제거는 isaplha()로 손쉽게 처리했다. 다중집합(원소의 중복을 허용)이기 때문에, set형태로 접근하지 못해서 고민하다가 시간을 다 날렸다.. 그 답으로 구글링해서 찾은 것이 counter 였다 2. counter 참조:https://velog.io/@godiva7319/%ED%94%84%EB%A1%9C%EA%B7%B8%EB.. 2022. 6. 6.
[프로그래머스 -오픈채팅방][파이썬] -11일차 https://programmers.co.kr/learn/challenges --풀이 코드 key point: dictionary 자료 구조 사용, change 커맨드에 대한 코드가 왜 필요 없는지 1. dictionary 자료 사용 이유 uid 기준으로 닉네임이 계속 바뀌기 때문에 dictionary로 접근해야지! 라고 생각함 key: uid, value: 닉네임 으로 정해두고 풀면 되겠다 싶었음 2. change와 leave에 대해서는 왜 아무 코드도 없을까? 사실 change 코드가 가장 까다롭게 다가왔다. replace를 써야하나 뭘 해야되나 고민도 했다. 어차피 uid에 따라서 아이디를 바꾸는 딕셔너리 구조이기 때문에, 같은 uid라면 닉네임이 바뀐채로 최신화 된다는 점이다 그래서 for문을 따.. 2022. 6. 5.
[프로그래머스- 약수의 개수와 덧셈][파이썬] -11일차 https://programmers.co.kr/learn/challenges --풀이 key point: range의 범위에 1씩 더해서 자기 자신도 나누어주어야 하는것, count=0의 위치(숫자가 바뀔 때마다 초기화 해줘야함) 2022. 6. 5.
[프로그래머스 -멀쩡한 사각형][파이썬] -10일차 https://programmers.co.kr/learn/challenges 유형: 수학 key point: gcd(최대공약수) 이해하고 수학 로직 이해하기 본인 풀이: 완벽하게 실패 -> 구글링(https://velog.io/@sem/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-LEVEL2-%EB%A9%80%EC%A9%A1%ED%95%9C-%EC%82%AC%EA%B0%81%ED%98%95-Python)_ 비슷한 패턴이 반복되고 있는 기준점이 w,h와 최대공약수였고, 이 점을 기준으로 직선이 지나는 사각형의 개수를 찾아보면, w+h - w와 h가 중복으로 세어지는 w와 h의 최대공약수 만큼을 빼준 값이 되었다. => w+h-gcd(w,h) 느낌: 어렵.. 2022. 6. 4.
[백준- 1476 날짜 계산][파이썬] -10일차 https://www.acmicpc.net/problem/1476 key point: 음수%양수 =1, 모두에게 공통되는 cnt가 올라갈때는 while 문을 쓰자! cnt= 연도, 연도에서 주어진 e,s,m의 값을 빼고 이 모든 3개의 요소들이 나누어 떨어지게 생각 ex) 1 16 16 만약 cnt=16이면 (16-1) % 15 ==0. (16-16) % 28 ==0, (16-16)%19 ==0 이다 2022. 6. 4.
[백준- 1075 나누기][파이썬] -10일차 https://www.acmicpc.net/problem/1075 key point: 뒷 자리를 1부터~~로 시작하면 01로 치환하기가 복잡해지니까 00 01로 접근을 시작하기 부르트포스 개념도 조금씩 익숙해진다 2022. 6. 4.
[백준- 7568 덩치][파이썬] -9일차 https://www.acmicpc.net/problem/7568 부르트포스 유형을 집중적으로 풀어보는 중이다 key point: rank 계산 ex) data=[ [55,185] , [58,183], [88,186], [60,175], [46,155] ] x=[55,185] 부터 y= 0번 1번 2번 3번 4번 인덱스를 순차적으로 돌다가, [88,186]에서 + 1 이 된다 또 x=[58,183]도 쭉~~ 같은 로직으로 돌게 된다 -> for 문에서 range을 안 쓴 이유: 자기 자신과 비교하면 조건에 걸리지 않아서, 관계가 없음 ex) x= [55,185] y=[55,185] 이어도 아무일이 일어나지 않는다는 의미 --> 숫자 자체에 접근해서 2개의 for문으로 자신보다 큰 덩치가 있으면 순위를 하.. 2022. 6. 3.
[백준- 2231 분해합][파이썬] -9일차 https://www.acmicpc.net/problem/2231 브루트포스 유형 -> 모든 경우의 수를 다 구해서 조건에 맞는 값을 판단해서 return 해주자 1부터 자기 자신까지 모든 경우의 수를 다 구해봐서 if문으로 찾고자 하는 경우의 수 찾기 break 없으면 min 값을 구하지 못함 2022. 6. 3.
[백준- 2798 블랙잭][파이썬] -8일차 https://www.acmicpc.net/problem/2798 - 부르브포스 유형 -> 무차별 대입, 조합 가능한 모든 경우들중에서 원하는 경우를 뽑는 경우 3개의 수를 뽑아서 경우의 수를 구하는 문제 -> combinations로 접근이 가능하지만, for문으로 풀어보자 커서를 3개라고 생각하고, 각각의 숫자를 하나씩 가리킨다고 생각해보자 [5,6,7,8,9] 이런식으로 있으면, 커서 1: 5 커서 2: 6 커서 3: 7 -> 8 -> 9 커서 1: 5 커서 2: 7 커서 3: 8 -> 9 커서 1: 5 커서 2: 8 커서 3: 9 key point: 앞선 커서보다 같거나 작은 수를 가리킬 수는 없다 -> for문의 range 범위를 i -> x= i+1 -> q=x+1 !! 마지막 for문의 범위.. 2022. 6. 2.
[프로그래머스 - 시저 암호][파이썬] - 8일차 https://programmers.co.kr/learn/challenges key point: chr, ord/ %26 로직 1. chr, ord 아스키 코드를 모르면 풀 수가 없다 chr() 숫자 -> 문자열 ord() 문자열 -> 숫자 2. %26 로직 ex) z에서 n=4이면 d를 출력해줘야한다. 리스트가 반복적으로 넘어가면서(?) 돌아가야함 -> 즉, n을 더했을때 가장 마지막 문자의 아스키코드보다 커질 수 있다는 점이다 그래서 %26(a~z)길이로 나눠주고, 대문자는 ord('A') 만큼의 수를, 소문자는 ord('a')만큼의 수를 더해주는 것이다 위의 예시를 그대로 가져와서, z-> 122, n=4 (122-97+4)%26=3 3+97=100 100 -> d 2022. 6. 2.
[프로그래머스 - 가장 큰 수][파이썬] - 7일차 https://programmers.co.kr/learn/challenges --시간 초과 코드 -> permutations가 모든 경우의 수를 구하기 때문에, 시간 초과가 나버렸다 -- 해결 코드 key point: 3번줄의 3배 곱하기, sort 1. *3하는 이유(구글링) 2번줄에 str형으로 바꾸고 list에 append해둬서 lambda~ 이 식이 없이 그냥 sort해도 원하는 방식대로 처리 될 것이다. [3,30,34,5,9] -> [9,5,34,30,3] 하지만 우리는 3이 30보다 앞으로 위치시켜야 한다 (0보다 큰 수가 더 높은 자리수를 차지하는게 더 큰 값이니까) 그 과정을 위해서 3배(문자열임을 인지) 2. sort [999,555,343434,303030,333]으로 키운 상태에서 .. 2022. 6. 1.