본문 바로가기

전체 글71

[ SWEA ] D3 - 3456, 1209, 9700, 5549 - python 문제풀이 3456 직사각형 길이찾기 접근법 : 딕셔너리 활용 - 특히 defaultdict를 활용하면 매번 값이 있는지 확인할 필요가 없어서 편함 from collections import defaultdict for tc in range(int(input())): nums = list(map(int, input().split())) d = defaultdict(int) for num in nums: d[num] +=1 for k,v in d.items(): if v==1 or v==3: result = k break print("#{} {}".format(tc+1,result)) 또 다른 방법으로는 어차피 값을 3개만 들어온다는 것을 활용해서 - 3개가 모두 같을 때 vs 두 개만 같을 때의 경우를 활용해 구현.. 2021. 7. 6.
[ OS 기초 ] 07. Deadlock 1. 데드락이란? 2. Starvation vs Deadlock 3. 자원의 개념 4. 자원과 데드락 5. 데드락 모델 6. 데드락 발생의 필요조건 7. 데드락 처리 : 예방(prevention), 무시(Avoidance), 감지 및 회복(Detection and Recovery) 00 개요 앞서 프로세스와 스레드, 스케줄링의 개념에 대해 알아보았는데 이처럼 다양한 방법과 기법을 활용하더라도 문제가 발생할 수 있다. 데드락도 이러한 문제 중 하나로 프로세스가 계속 작업을 이어나갈 수 없는 상태인데 언제 데드락이 발생하고 이 상황에서 어떤 방법으로 데드락을 해결해 나갈 것인지에 대해 살펴보았다. 01 데드락이란? 데드락은 쉽게 말해 발생 가능성이 없는 이벤트를 기다리고 있는 상태를 의미한다. 프로세스의 상.. 2021. 7. 6.
[ JS 기초 ] 소수 확인, 소인수 분해 01 소수 확인 자바스크립트로 소수를 판별하는 여러 방법 중 다음 두 가지를 구현하면 아래와 같다. 정석대로 판별하기 : 2부터 n까지 for문을 돌면서 나누어떨어지는지 확인 코드 최적화 > n 제곱근까지만 확인 01-1 소수 확인하기 function isPrime(n) { if (n 2021. 7. 5.
[ SWEA ] D3 - 11688, 5431, 2805, 1228 - python 문제풀이 11688 Calkin-wilf tree 1 접근 : 문제를 읽자마자 트리형식, 재귀로 풀면 빠를 것 같다는 생각이 들어 바로 구현 - 문자열, 분모에 들어갈 수, 분자에 들어갈 수를 넘겨주고 문자열의 0번째로 조건 판별 - 재귀 종료 조건 : 문자열의 길이가 0일 때 == 더 이상 깊게 들어갈 필요가 없을 때 def tree(idx): global route,up,down if route[idx] == 'L': down = up+down else: up = up+down if idx == len(route)-1: return else: tree(idx+1) for tc in range(int(input())): route = list(input()) up, down = 1, 1 result = tree.. 2021. 7. 5.
[ JS 기초 ] Number객체, JS로 표현할 수 있는 숫자 범위 00 개요 - JS의 숫자표현 자바스크립트의 숫자표현 : 64비트 부동소수점 표현 방식 사용 - 첫 번째 비트 : 부호 표현 - 열 한개의 비트 : 지수 표현 - 나머지 비트 : 소수 표현 따라서 다음 코드를 돌려보면 예상과는 다른 결과가 나온다 function number_check() { console.log(5/4)//1.25 console.log("0.1 + 0.2 === 0.3 ? 결과는 ", 0.1+0.2===0.3) //false console.log("0.1 + 0.2 == 0.3 ? 결과는 ", 0.1+0.2==0.3) //false } number_check() 저 코드를 통해서 얻고자 하는 결과는 true 였을텐데, 자바스크립트의 표현 방식으로 인해 false가 출력되는 문제가 발생한.. 2021. 7. 2.
[ SQL ] HackerRank Basic - MySQL 답안 정리(3) Higher than 75 marks SELECT NAME FROM STUDENTS WHERE MARKS > 75 ORDER BY SUBSTRING(NAME,-3,3),ID 개념 : Substring 활용 : Substring(문자열, 시작할 자리위치, 가져올개수) Employee Names, Salaries // Names SELECT NAME FROM EMPLOYEE ORDER BY NAME; // Salaries SELECT NAME FROM EMPLOYEE WHERE SALARY > 2000 AND MONTHS < 10 ORDER BY EMPLOYEE_ID; Type of Triangle SELECT CASE WHEN A+B 문자열을 합쳐줌 개념 : substring(문자열, 시작위치, 가져올개수.. 2021. 7. 2.
[ SWEA ] D3 - 1213, 1234, 1240, 3314, 4751 - python 문제풀이 1213 String 두 가지 접근법 - 방법 1 ) for문 돌면서 매번 체크 - 방법 2 ) 카운트 함수 활용 # 방법 1 - for문 돌면서 일치하는 첫 글자 나오면 확인하기 for tc in range(10): N = int(input()) target = input() sentence = input() result = 0 for i in range(len(sentence)): if sentence[i] == target[0]: if sentence[i:i+len(target)] == target: result += 1 print("#{} {}".format(N,result)) # 방법 2 - count 함수 활용 for tc in range(10): N = int(input()) target =.. 2021. 7. 2.
[ OS 기초 ] 06. 프로세스 동기화, 상호배제 (2) - 상호배제 기법 1. SW solutions - 데커, 피터슨, 다익스트라 알고리즘 2. HW solutions - TAS Instruction 3. OS supported SW solutions - Spinlock, Semaphore, Eventcount & Sequencer 4. Language Level Solution - Monitor 00 도입 여러 프로세스가 동시에 같은 자원을 필요로 하는 상황에서 발생할 수 있는 문제를 해결하기 위해 상호 배제, 즉 임계 공간(critical section)에는 한 번에 하나의 프로세스만 들어갈 수 있도록 구현해야 함을 알 수 있었다. 이러한 상호 배제 기법에는 소프트웨어를 통한 구현, 하드웨어를 통한 구현, 운영체제의 지원을 기반으로 구현하거나 프로그래밍 언어를 통한 구현.. 2021. 7. 2.
[ SWEA ] D3 - 1220, 1216, 5601, 10570 - python 문제풀이 1220 Magnetic 주의 - 답안이랑 내가 푼 답이랑 숫자는 비슷한데 값이 틀리다면 조건을 반대로 바꿔보면 된다... ㅎ 접근 - 생각보다 쉽고 다양한 방법으로 풀 수 있음 방법 1 : 이끌리는 방향의 가장 바깥에 있는 것들을 빼버린 뒤 시작 인덱스와 끝 인덱스만 검토하면서 직전값과 다르면 카운트를 올려주고 값을 갱신해주는 방식 방법 2 : 0을 다 지우고 "12"만 세어주는 방식(어차피 저 바뀌는 부분만 카운트하면되니까) # 방법 1 - 코드가 길다... for tc in range(10): N = int(input()) table = [list(input().split()) for _ in range(N)] cnt = 0 before = table[0][0] for i in range(N): s.. 2021. 7. 1.
[ OS 기초 ] 06. 프로세스 동기화, 상호배제 1. 동기화란? 2. 동기화의 개념과, 동기화를 하는 이유 3. 동기화와 관련된 개념 4. 상호배제와 기법 00 동기화란? 동기화(Synchronization) 은 쉽게 말해 시스템 프로세스 간 정보를 공유하는 행위라 정리할 수 있다. (프로세스의 대화) 01 동기화, 하는 이유 우리가 평소 이용하는 컴퓨터는 '다중 프로그래밍 시스템' => 여러 프로세스가 동시에 돌아간다 - 프로세스는? 자원을 제어해 작업을 수행하여 목적을 달성한다 - 그렇다면 여러 프로세스가 하나의 자원을 동시에 쓰려고 한다면? 문제가 발생할 수 있다 ex. race condition : 실행 순서에 따라 결과가 달라지는 것 특히 프로세스는 기본적으로 '비동기적' 이면서 '병행적' 이다 - 비동기적(Asynchronous) : 다른 .. 2021. 6. 30.
[ SWEA ] D3 - 1215, 1225, 1289, 10505 - python 문제풀이 1215 회문1 파이썬에서 회문 관련 문제는 슬라이싱을 사용하는게 빠르다 for tc in range(10): N = int(input()) cnt = 0 board = [list(input()) for _ in range(8)] # 가로 확인 board_rev = [[board[i][j] for i in range(8)] for j in range(8)] # 세로 확인 for row in range(8): for s in range(8-N+1): tmp = board[row][s:s+N] if tmp == tmp[::-1]: cnt += 1 tmp = board_rev[row][s:s+N] if tmp == tmp[::-1]: cnt += 1 print("#{} {}".format(tc+1, cnt)).. 2021. 6. 30.
[ SQL ] HackerRank Basic - MySQL 답안 정리(2) - Weather Observation Station Questions Weather Observation Station 01 ~ 05 // 01 SELECT CITY, STATE FROM STATION // 02 SELECT DISTINCT CITY FROM STATION WHERE ID % 2 = 0 // 03 SELECT COUNT(CITY) - COUNT(DISTINCT CITY) FROM STATION // 04 SELECT CITY, LENGTH(CITY) FROM STATION GROUP BY CITY ORDER BY LENGTH(CITY),CITY LIMIT 1; // 05 SELECT CITY, LENGTH(CITY) FROM STATION GROUP BY CITY ORDER BY LENGTH(CITY) DESC, CITY LIMIT 1; Weather Ob.. 2021. 6. 29.
[ SQL ] HackerRank Basic - MySQL 답안 정리(1) Revising the Select Query 1,2 SELECT * FROM CITY WHERE POPULATION > 100000 AND COUNTRYCODE = 'USA' SELECT NAME FROM CITY WHERE POPULATION > 120000 AND COUNTRYCODE = 'USA' Select All SELECT * FROM CITY Select By ID SELECT * FROM CITY WHERE ID = 1661 Japanese Cities' Attributes & Names SELECT * FROM CITY WHERE COUNTRYCODE = 'JPN' SELECT NAME FROM CITY WHERE COUNTRYCODE = 'JPN' 2021. 6. 29.
[ SWEA ] D3 - 1217, 1230, 3431, 4406 - python 문제풀이 1217 거듭제곱 def mul(num,k): global n,cnt num *= n if k == cnt: return num return mul(num,k+1) for tc in range(10): N = int(input()) n,cnt = map(int, input().split()) print("#{} {}".format(N,mul(1,1))) 또 다른 방식 def mul(n,m): if m == 1: return n return mul(n,m-1)*n for tc in range(10): a = int(input()) b,c = map(int, input().split()) print('#{} {}'.format(a,mul(b,c))) 1230 암호문3 오래 걸리지만, 문제를 잘 이해하고 차근.. 2021. 6. 29.
[ OS 기초 ] 05. 스케줄링 알고리즘 대표적인 스케줄링 알고리즘 1. FCFS (First Come First Service) 2. RR (Round Robin) 3. SPN (Shortest-Process Next) 4. SRTN (Shortest Remaining Time Next) 5. HRRN (High Response Ratio Next) 6. MLQ (Multi Level Queue) 7. MFQ (Multi-level Feedback Queue) 01 FCFS - 선착순 알고리즘 : 가장 먼저 도착한 프로세스부터 프로세서를 할당해주는 알고리즘 - FCFS가 적절한 시스템 : 배치 시스템 (일괄처리 시스템) - 빠른 응답보다 빨리 처리해주는게 더 중요 - FCFS가 부적합한 시스템 : 대화형 시스템 (interactive syst.. 2021. 6. 29.
[ JS 기초 ] 값 비교 ==, ===, 객체 비교 비교에 대해 아주 간단히 정리하면 숫자, 문자열, 불리언 값 비교 : ==,=== 을 통해 비교 == : 값을 비교 === : 값과 형을 비교 (메모리 주소값도 비교) === 이 == 에 비해 더 엄격 프로젝트를 할 때는 보통 == 를 사용해서 비교해왔음 하지만 정확한 비교를 위해서는 === 사용 예시 코드 console.log("1" == 1)// true console.log("1" === 1)// false 자바스크립트는 == 로 값을 비교할 때 비교하기 전에 문자열 "1" 을 숫자 1로 변환시킨다. 반면, === 는 형(타입)까지 비교하기 때문에 문자열인 "1"과 숫자 1은 다르다고 판단한다. 그렇다면 두 객체는 어떻게 비교해야 할까? 위에서 사용한 ==, ===를 통해 접근하면 기대했던 결과와 .. 2021. 6. 28.
[ JS 기초 ] Boolean 객체의 값(t/f) VS Boolean 값(t/f) 자바스크립트의 타입과 관련해서 헷갈렸던 부분이 있어 따로 정리해보았다. Boolean([ ]) 와 [ ] == true 위 두 코드는 각각 true, false를 반환한다 왜? 답은 앞의 Boolean([ ])은 불린 객체이고 뒤의 [ ] == true는 단순히 불린 값 비교이기 때문이다. 코드로 보면 더 확실히 할 수 있다 불린 객체를 사용하면 ''(빈문자열), null, undefined, 0, NaN, false 를 제외하고는 모두 true를 반환한다 (심지어 빈 문자열이나 빈 객체까지도 true를 반환한다) Vue.js나 자바스크립트 기반으로 웹 프로젝트를 할 때 v-if에 참거짓을 판별하는 경우는 뒤에 나온 값 비교에 해당한다. 참고 : https://developer.mozilla.org/ko.. 2021. 6. 28.
[ SWEA ] D2 - 1940, 1928, 1288, 1284, 1204 - python 문제풀이 1940 가랏 RC카 접근법 : 커맨드가 0이 아닐 경우에만 뭔가 계산을 해주고, 0일때는 바로 현재 속도만 더해주면 된다 for tc in range(int(input())): commands = int(input()) distance = 0 current_speed = 0 for _ in range(commands): info = input() if info != "0": #앞에서 1인지2인지도 비교안하고 빠질수있음 command = info.split(" ")[0] acceleration = int(info.split(" ")[1]) if command == "2" and current_speed < acceleration: current_speed = 0 elif command == "2": cu.. 2021. 6. 28.
[ JS 기초 ] 기본 코드 - 변수(var,let) 활용 연습코드 01 : 변수 설정해서 출력 function print_name(){ var my_name = "no one" my_name = "dduba-dduba" console.log(my_name)// "dduba-dduba" } 연습코드 02 : 변수 호이스팅 function hoisting() { var start = "This is start" end = "This is end" var end; console.log(start,end)// This is start, This is end } 에러가 나지 않고 나중에 변수를 선언해도 위쪽으로 호이스팅 되어 그대로 출력됨 - 변수 호이스팅 : 변수를 어디에서 선언하든 변수 선언이 함수의 맨 앞으로 이동 - 스크립트 맨 마지막에 선언된 변수라도 그 코드.. 2021. 6. 27.
[ JS 기초 ] 기본 코드 - 출력, 반복문, 덧셈 연습 코드 01 : 1부터 n-1까지 출력 function example(n) { for (var i = 0; i < n; i++ ){ console.log(i); } } 연습 코드 02 : 1부터 n-1까지 더하기 function example(n) { var cnt = 0 for (var i = 0; i < n; i++ ){ cnt += i } console.log(cnt) return cnt } 2021. 6. 27.
[ SWEA ] D2 - 1954, 1948, 1946, 1945 - python 문제풀이 1954 달팽이 숫자 달팽이처럼 돌기 위해서는 오른쪽, 아래, 왼쪽, 위쪽 방향을 반복적으로 돌아가면서 이동해 들어가고, 그 빈도는 위 그림에서 볼 수 있듯이 각 n번에서 1번 순서대로, 처음을 제외하면 각각 2번씩 반복적이라는 규칙을 찾을 수 있다. for tc in range(int(input())): N = int(input()) snail = [[0]*N for _ in range(N)] number = 1 jump_cnt = N direction = 'right' # 'right','down','left','up'순으로 바뀔 것 row_idx,col_idx = 0,0 while number 2021. 6. 27.
[ SWEA ] D2 - 1970, 1966, 1961, 1959 - python 문제풀이 1970 쉬운 거스름돈 지불할 수 있는 돈의 종류(option)들을 순회하면서, 최대한 낼 수 있는 개수만큼 쓰고 다음 단위(더 작은 지불 단위 옵션)으로 넘어가게 해서 풀 수 있음 options = [50000,10000,5000,1000,500,100,50,10] for tc in range(int(input())): N = int(input()) cnt = [0]*8 for i in range(8): if N != 0: cnt[i] += N//options[i] N %= options[i] else: break print("#{}\n{}".format(tc+1, " ".join(map(str,cnt)))) 1966 숫자를 정렬하자 방법 1 - sort 함수 사용 방법 2 - 개수를 세어나갈 카운트 .. 2021. 6. 26.
[ SQL 고득점 kit ] String, Date - mysql 01 루시와 엘라 찾기 SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS WHERE NAME in ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty'); 02 이름에 el이 들어가는 동물 찾기 mysql의 대소문자 구분여부 컬럼, 테이블명 : 대소문자 구분O VARCHAR,TEXT같은 데이터 : 대소문자 구분X 따라서 이 문제의 경우 대소문자 지정을 따로 해주지 않아도 풀리기는 한다(아래처럼) SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE ANIMAL_TYPE = 'Dog' AND NAME LIKE '%el%' ORDER BY NAME; 만약 mysql을 쓰지 않을때는 low.. 2021. 6. 26.
[ SQL 고득점 kit ] JOIN - mysql 01 없어진 기록 찾기 SELECT O.ANIMAL_ID, O.NAME FROM ANIMAL_OUTS O LEFT JOIN ANIMAL_INS I ON O.ANIMAL_ID = I.ANIMAL_ID WHERE I.ANIMAL_ID IS NULL ORDER BY O.ANIMAL_ID; INS에는 있고 OUTS에는 없는 데이터이기때문에 INS를 기준으로 LEFT JOIN 사용 02 있었는데요 없었습니다 SELECT I.ANIMAL_ID, I.NAME FROM ANIMAL_INS I INNER JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID WHERE I.DATETIME > O.DATETIME ORDER BY I.DATETIME; DATETIME 자체로 비교 가능하다는 점.. 2021. 6. 25.