![[python] 백준 7120번 String](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpvnE5%2FbtrtRWpjYoX%2FW3OMpK2zEKqRazxNW6wza0%2Fimg.jpg)
문제 풀이 글보다는 그림을 보고 설명을 하는 게 나을 것 같다. 입력으로 들어온 문자열 ppppppiaanooooo 가 있을 때 해당 문자열을 리스트에 담아 문자 하나하나를 원소로 갖는다. i번째 문자가 다음 순서인 i+1번째 문자와 같지 않을때만 추가해주면 된다. (0번째 문자와 1번째 문자가 같지 않으면 된다.) 하지만 예시 그대로 코드를 짜면 위의 그림과 같이 pian이라고 출력이 된다. 그래서 해당 문자열 첫번째 문자(p)를 먼저 빼두고 i번째 문자와 i+1번째의 문자가 같지 않을 때의 조건에서 i+1번째의 문자를 이어 붙여주면 piano라는 글자가 나오게 된다. 완성된 코드!!😊👍 s = list(input()) rs = s[0] for i in range(len(s)-1): if s[i] !=..
![[python] 백준 2161번 카드1](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMyLLp%2FbtrmaEaI52P%2FwastG4l123eLHjlKp33I3k%2Fimg.jpg)
문제 풀이 문제에서 N=4인 경우에 버린 카드는 1 3 2가 되고 남는 카드는 4가 되어 출력 결과가 1 3 2 4가 되길래 짝수 홀수로 나누면 될 줄 알았다. 하지만 테스트 케이스 1번에서 출력 결과가 1 3 5 7 4 2 6이 되는 것에 대해서 도무지 이해가 안 되어 결국 그림을 그려 이해를 하고 어떻게 하면 풀 수 있을지를 알아냈다. 그림에서와 같이 cnt 값에 따라서의 2가지의 작업을 돌리면 되었다. 1. cnt가 홀수면 첫 번째 원소 값을 원래 리스트에서 pop 하고 다른 리스트에 append 2. cnt가 짝수면 첫 번째 원소 값을 원래 리스트에 append 하고 원래 리스트에서 첫 번째 위치에 있는 원소 값을 pop 대부분의 사람들은 데크(dequeue)로 푸셨던데 아직 본인은 쓸 줄 몰라 ..
![[python] 백준 1076번 저항](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2a1WW%2FbtrjPQY5nFa%2F9IckCluIrbFXuKnkfrcyRk%2Fimg.jpg)
문제 요약 및 풀이 예제 1을 참고해보자. 값과 곱의 규칙은 10의 제곱수의 규칙과 같다고 볼 수 있다. 첫 번째 입력값 Yellow = 4 두번째 입력값 violet = 7 세번째 입력값 red = 100으로 출력은 4700이 된다. 마지막에 들어온 입력값은 곱으로 계산해주면 되고 나머지 입력값들은 뒤에 붙여주면 된다. 코드를 보자. 색상 값, 곱의 표를 dictionary로 표현하였고 입력이 3개라는 것을 이용하여 for문의 range가 0, 1, 2 총 3개의 범위이기 때문에 마지막 index인 2가 올 때 10의 제곱수를 곱해주도록 하였다. ex) input -> yellow, violet, red 색 yellow violet red 배열 인덱스 0 1 2 값 4 7 100 최종 출력 4700 이..
![[python] 백준 2154번 수 이어 쓰기 3](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwiHQF%2FbtrgoKOnzi9%2FEWVuPWz5EWngV557dqrIv1%2Fimg.jpg)
문제 요약 및 풀이 문제는 간단하다. N 15를 입력받았을 때 해당 15가 몇 번째에 나타나는지만 알면 된다. 먼저 N의 범위가 1 ≤ N ≤ 100,000 이기 때문에 1부터 100000까지 문자열로 붙여준 후에 find나 index 함수로 해당 위치의 값을 뽑아주면 된다. 단지 find나 index의 값이 0부터 시작이기 때문에 1을 더해주고 결과를 반환해주면 된다. ex) 입력이 1이라면 1번째라고 결과가 나와야 하지만 배열에서 index는 0부터 시작이기 때문에 결과가 0이 나오게 된다. 완성된 코드!!😀😀 s = "" for i in range(1, 100001): s += str(i) print(s.index(input())+1)
![[python] 백준 1668번 트로피 진열](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1xPxH%2Fbtre6CKHQfY%2Fr2eoMudkijC6f76HyKL9tK%2Fimg.jpg)
문제 요약 및 풀이 간단하게 그림으로 그려서 보여드리겠습니다. 졸라맨 같은 사람은 문제에 나오는 민식이 입니다. 민식이가 선반을 왼쪽에서 보느냐 오른쪽에서 보느냐에 따라서 보이는 트로피의 개수가 다르기 때문에 이렇게 그림을 그려봤습니다. 선반을 오른쪽에서 왼쪽으로 바라봤다면 낮은 트로피부터 높은 트로피까지 총 5개가 보이는 것이고 반대로 선반을 왼쪽에서 오른쪽으로 바라봤다면 높은 트로피가 가장 먼저 보이게 되기 때문에 총 1개가 보이게 됩니다. 그 점을 생각하고 풀어주시면 됩니다. 완성된 코드!!👍😊 처음 코드 N = int(input()) h = [] max = -1 count = 0 for i in range(N): h.append(int(input())) if max < h[i]: max = h[i..
![[python] 백준 1075번 나누기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdbsd98%2FbtreVyvXYQk%2FQKCyfQMKlSpx49B9E91Q70%2Fimg.jpg)
문제 요약 및 풀이 N이 1000이고 F가 3일 때, N의 일의 자리, 십의 자리를 적절하게 제일 작게 바꿔서 바뀐 N을 F로 나누어 떨어지게 만들어야 한다. 바뀐 N은 1001이고 결과 출력 값은 02가 되는 것. 내가 생각한 풀이는 1. N을 입력받아서 일단 해당 일의 자리와 십의 자리를 00으로 바꿔줌 2. 바뀐 N을 int형으로 바꾸어서 F와 떨어지는지 확인 후 떨어지지 않는다면 1씩 누적시켜서 F와 떨어질 때까지 확인 3. 나누어 떨어진다면 해당 N의 십의자리와 일의 자리를 출력 3번은 슬라이싱으로 쉽게 표현할 수 있다. 아래의 표를 통해 N = 266, F가 9일 때의 결과를 출력해보겠다. N (입력) F (입력) 바뀐 N N % F N[-2:] (출력) 266 9 200 False 201 F..
![[java] 백준 1568번 새](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdbXaH%2FbtrbEN4R8Va%2FIBUkJKIANydxSKYLYEHu6K%2Fimg.jpg)
문제 요약 새들은 1부터 ~ 모든 자연수까지 오름차순으로 노래한다. 숫자 K를 노래할 때 K 마리만큼 날아간다. 남은 N마리의 새가 불러야 할 숫자보다 작으면 1부터 다시 부른다. 모든 새가 날아가기까지 총 몇 초가 걸리는지 출력. (날아가는데 1초) 문제 풀이 K는 1씩 증가 N이 K보다 작아지기 전까지 N은 K만큼 감산 감산을 하는 동안 count를 하나씩 누적 N이 K보다 작다면 3번과 같이 K를 1로 초기화시켜주고 다시 N에 K만큼 감산 N이 0이 될 때까지 이 동작을 반복 N이 0이 되면 반복문을 탈출하고 count 출력 1. N=14 K N 1 13 2 11 3 8 4 4 5 -1 count = 4 2. N=4 K N 1 3 2 1 3 -2 count = 2 3. N = 1 K N 1 1 co..
![[java] 백준 10870번 피보나치 수 5](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FObSLq%2FbtrbrVfI28Y%2FSSdKKnLAjcXgsrksDnzMxk%2Fimg.jpg)
문제를 요약하자면 0번째 0, 1번째 1, 2번째부터는 0번째 값과 첫 번째 값의 합이라는 것이다. F(2) = F(0) + F(1) -> 즉, F(n) = F(n-2) + F(n-1) 이 문제는 간단하게 재귀를 쓰면 된다. import java.util.Scanner; class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n_th= sc.nextInt(); System.out.println(pibo(n_th)); } static int pibo(int n){ if(n