문제 요약 및 풀이 예제 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 이..
문제 풀이 처음에 배열을 이용하는 문제인 줄 알아 배열로 풀다가 시간 초과가 나게 되어서 입력 출력에 규칙이 보여 해결하였다. K가 들어오면 M인(열 개수) 만큼 나누어 몫과 나머지를 출력해주면 된다. 6 / 4 = 1, 2 14 / 4 = 3, 2 N, M, s = map(int, input().split()) print(s // M, s % M)
문제 풀이 2*2짜리 표 -> 2차원 배열을 이용 시계방향으로 회전 후에 4회전 시에는 원점으로 돌아오기 때문에 회전을 담당해줄 메서드, 표의 값을 계산해줄 메서드가 필요. 값을 스왑 해주기 위해 시계방향으로 1회전, 2회전, 3회전 돌렸을 때의 좌표값들을 적어보았고 그 좌표값들을 스왑 해주기 위해 temp 변수를 하나 초기화해주어 swap 해주었다. 간단하게 if문으로 돌릴 수도 있었겠으나 요즘은 배열에 대해서 좀 연습을 하는 중이라서 배열을 써보았다. 완성된 코드!!😀😀 # swap def swap(l): temp = l[0][0] l[0][0] = l[1][0] l[1][0] = l[1][1] l[1][1] = l[0][1] l[0][1] = temp return l # 계산 def cal(l): ..
문제 요약 및 풀이 문제 자체는 간단하다. 2의 -N승을 계산하면 된다. 하지만 기본적으로 표현할 수 있는 소수점 자릿수를 넘어가게 되면 e^n, e^-n으로 표기가 된다. 그래서 표현할 수 있는 소수점 자리수를 늘리려면 늘리고 싶은 자리 개수를 sosu_N이라고 생각하면 "%. sosu_Nf"와 같이 만들어 주면 된다. 대략 sosu_N을 300으로 조절하면 아래와 같은 결과를 볼 수 있다. 0 같은 경우 rstrip() 메서드를 통해 오른쪽에 있는 0을 지워주면 된다. 완성된 코드!! 😀😁 print(("%.300f" % (1/(2**int(input())))).rstrip("0"))
문제 요약 및 풀이 문제는 간단하다. 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)
문제 요약 및 풀이 N을 입력받으면 N X N 만큼 크기의 단어 집합이 만들어진다. 이 단어 집합은 가로 단어와 세로 단어가 같다. (사토르 마방진의 개념) 사토르 마방진이면 YES를 아니면 NO를 출력 2차원 배열로 풀 생각으로 그려보았다. N X N 만큼이라고 했으니 2차원 배열로 [N][N] 크기만큼 두 개의 배열을 만들어 놓는다. 사토르 마방진은 가로 단어와 세로 단어가 같다고 했기 때문에 두 개의 배열(가로 단어 집합, 세로 단어 집합)을 만들어야겠다고 생각했다. 입력받는 값들을 보면 가로로 단어를 입력받기 때문에 해당 집합을 그림과 같이 나타내 보면 세로는 대칭이라고 볼 수 있다. 2차원 배열의 특징인 [i][j]를 [j][i]로 스왑 하여 세로 단어 집합의 배열을 만들면 된다. 이해가 잘 되..
문제 풀이 및 요약 문제 이해가 잘 안 되시는 분들에게 직접 그림을 그려서 보여드리겠다. check x를 통해서만 x가 있는지 없는지를 판단하여 있으면 1을 출력, 없으면 0을 출력한다. 나머지 add, remove, toggle / empty, all 등은 값 삽입, 삭제가 이루어진다. 문제에도 나와 있다시피 집합이기 때문에 set()을 써야 한다. 얼핏 보면 set 도 {} 중괄호를 사용하고 있어 {} 중괄호를 사용하는 딕셔너리와 헷갈릴 수도 있으나 set 같은 경우 값이 하나 {1, 2, 3}이고 딕셔너리 같은 경우 {'key1' : 'value1', 'key2' : 'value2'}와 같이 key와 value로 이루어져 있다. 처음에 set()을 생각을 못하고 list로 접근하여 풀어서... 당연..
문제 요약 및 풀이 문제를 보자마자 아 그림으로 풀어야겠다 싶어서 그림으로 그려봤다. 순서는 ① -> ② -> ③ 순대로 보면 될 것 같다. 64를 반으로 나누면 32, 32 2개의 막대가 나오는데 하나의 막대는 버려야 하므로 절반으로 나누어 떨어질 때까지 문제에 있는 2가지 과정을 반복하다 보면 ②번과 같은 64 32 16 8 4 2 1 이 보여진다. 수 들의 공통점은 2^n 승이라는 것. 즉, 2진수로 표현이 가능하다. ③번과 같이 10진수로 입력을 받아 2진수로 변환을 해준후 1의 개수가 총 몇 개인지를 반환해주면 된다. 완성된 코드!!👍😊 print(bin(int(input()))[2:].count('1'))
문제 요약 및 풀이 간단하게 그림으로 그려서 보여드리겠습니다. 졸라맨 같은 사람은 문제에 나오는 민식이 입니다. 민식이가 선반을 왼쪽에서 보느냐 오른쪽에서 보느냐에 따라서 보이는 트로피의 개수가 다르기 때문에 이렇게 그림을 그려봤습니다. 선반을 오른쪽에서 왼쪽으로 바라봤다면 낮은 트로피부터 높은 트로피까지 총 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..
문제 요약 및 풀이 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..